ffuf ( Fuzz Faster U Fool ) は、ディレクトリブルートフォースやパラメータ探索、サブドメイン列挙などに使える高速なWeb Fuzzerです。
分かりやすく言うと、ターゲットWebサイトのURLのうちの探索したい部分を ” FUZZ ” の文字を設定し、実行ではその部分を辞書に基づいて色々変更しながら試します。
で、結果的に隠しファイルなどを発見します。
OSINTやWebペンテストでよく使われます。
起動
左上のKaliメニュー ー 01-Reconaissance ー ffuf でhelp画面がでます。

バージョンは2.1.0

ターミナルからCLIで実行出来ます。
このツールは、多数のリクエストをwebサイトに送信して負荷をかけるので、他人の管理下のサーバーには行わないようにしましょう。
例によってラズパイ5(左)から、ラズパイ4B(右)のサイトを探索します。

実行
構文は下記の通りですが、検索したい部分の ” FUZZ ” の文字を入れます。
ffuf -u <ターゲットのURL(探す部分にFUZZを入れる)> -w <使用するワードリスト>
ディレクトリ検索
ターゲットサイトのディレクトリ検索では、ディレクトリの位置に ” FUZZ ” を入れます。
ffuf -u https://example.com/FUZZ -w /usr/share/dirb/wordlists/common.txt

結果の説明)
ファイル名 [Status: status code, Size: 大きさ, Words: 単語数, Lines: 行数, Duration: 時間]
Response status code
response status codeの簡単な説明。
status code | 意味 | 説明 | 具体例 |
---|---|---|---|
100番台 | 情報 | 通常は表示されない | |
200番台 | 成功 | リクエストの成功 | 200 : 実在するページやファイル |
300番台 | リダイレクト | 他のURLへ移動の必要 | 301/302 : リダイレクト。実は存在しているケースがある。 |
400番台 | クライアントエラー | リクエストのミス | 403 : アクセス拒否だが、存在はしている可能性大 404 : 存在しない |
500番台 | サーバーエラー | サーバー側に問題 |
拡張子付きのファイル検索
” FUZZ.拡張子 ” の形で検索します。
ffuf -u <ターゲットURL>/FUZZ.拡張子 -w <ワードリスト>
複数の拡張子で検索
検索したい拡張子が複数の場合はオプション ” -e ” を使用します。
ffuf -u <ターゲットURL> -w <ワードリスト> -e <拡張子>, <拡張子>
下の例では、 ” .php ” と ” .html ” で検索しています。

サブドメイン検索
サブドメインの部分に ” FUZZ ” を入れます。
ffuf -u https://FUZZ.example.com/ -w /usr/share/dirb/wordlists/common.txt

パラメータ検索
例としてphotonツールでサイトを探索して ” fuzzable.txt ” として出た結果を利用します。

上図ではphotonツールの探索の結果、2つのファイルがパラメータを持つファイルとして列挙されています。
これをffufツールで、パラメータ部分のブルートフォースをします。
1行目
1行目 ” /wp-login.php?action=lostpassword ” に対して、 ” lostpassword ” の部分を ” FUZZ ” に置き換えて探索します。

2行目
2行目の ” /?replaytocom=1 ” の ” 1 ” を ” FUZZ ” に置き換えて探索します。

上の例では、オプション ” -fc 301 ” でフィルターをかけています。
つまりresponse status codeの “301” (リダイレクト)を除外しています。
よく使われるのは ” -fc 404 ” オプションです。(存在しないものを除外する)
結果の出力
出力の記録は ” -o ” オプションです。
ffuf -u <URL(どこかにFUZZ)> -w <辞書ファイル> -o 結果記録ファイル名

デフォルトではjsonフォーマットで記録されます。

これでは読みにくいのでpythonで形成した結果

” -of ” オプションでは下記フォーマットでの保存が指定出来ます。
json, ejson, html, md, csv, ecsv, all
まとめ
数学では数式内の分からないところに ” x ” を置いて計算しますが、それと同じ感覚でURL内の分からない(調べたい)ところに ” FUZZ ” を置いて、隠しファイルなどを発見するツールです。
” FUZZ ” は、毛羽立ち、綿毛、警察官など色々な意味で使われるようですが、不明瞭・曖昧という意味も持っています。
kaliのツール的な ” FUZZ ” は、不明瞭・曖昧から転じて、付け入る隙・弱点、脆弱性・攻撃の起点という意味を持っているようです。
コメント