ffufの使い方ガイド|インストールから実践コマンドまで完全解説

ffufは高速に動作するHTTPファジングツールです。

Burp Suite Community EditionはIntruderに制限があって非常に動作が遅く使い物になりませんが、ffufがあればそれをカバーできるでしょう。

本記事ではffufのインストール方法から使い方まで詳しく解説していきます。また、似たようなツールであるdirsearchとの使い分けについても解説します。

本記事は教育・検証・レッドチーム演習など許可された環境での利用を前提としています。
第三者サーバーや実運用サイトに対する無許可のテストは不正アクセス禁止法などの法令違反となる可能性があります。

目次

ffufとは?

ffufはGo 言語で書かれた軽量かつ高速な HTTP ファジングツールです。

特定のパラメータやパスをワードリストで置換して多数のリクエストを送信し、応答のステータスコード・サイズ・行数・ワード数などをもとに有用な候補を抽出します。

Burp Suite の Intruder と比較すると、特に高速性柔軟な指定に優れています。

ffufのインストール方法

代表的な方法を挙げます。環境に合わせて選択してください。

Kali / apt(簡易)

Kali Linuxであればsudo apt -y install ffufコマンドでインストールできます。

sudo apt -y install ffuf

GitHub からバイナリ・ソース入手

あるいはGitHubから入手することもできます。

公式リポジトリhttps://github.com/ffuf/ffuf

ソースからビルド(Golang が必要)

git clone https://github.com/ffuf/ffuf.git
cd ffuf
go build

ビルドが不要であれば、公式リリースのバイナリをダウンロードして配置する方が簡単です。

ffufの基本的な使い方

ffuf は FUZZ と書いた箇所をワードリストの語で置換してリクエストを送信します。ワードリストは -w、ターゲットURLは -u を指定します。

GET パラメータをファジングする

ffuf -u 'http://example.com?login_username=admin&login_password=FUZZ' -w /path/to/wordlist

POST データをファジングする

POSTメソッドを使う場合は-dオプションでデータ部分を指定します。

ffuf -u http://example.com -d "login_username=admin&login_password=FUZZ" -w /path/to/wordlist

リクエストファイルを使用する(Burp 連携)

複雑なリクエストやクッキー付きのセッションを再現したい場合は、Burp などで保存したリクエストファイルを -request で読み込めます。

ffuf -request /path/to/file -w /path/to/wordlist

リクエストファイルは次のようにして保存します。

Burp Suiteを使っている場合は右クリックで「Copy to file」を選択してファイルに書き出すことができる。
「Copy to file」を選択してファイルに書き出す

HTTPヘッダーを指定する

-Hオプションを使うとHTTPヘッダーを指定・追加できます。-Hオプションは複数回指定できるので、2つ以上HTTPヘッダーを追加したい場合は-Hオプションを複数指定します。

ffuf -H "User-Agent: FUZZ" -H "X-Forwarded-For: 127.0.0.1" -u http://example.com

出力のフィルタ(不要なノイズを除外)

ffuf の結果は大量になるため、フィルタを使って不要な結果を除外します。初期設定で 404 はフィルタされています。

一度ffufを実行してみて、あまりに多くの表示がある場合はフィルター条件を指定して出力を抑えたり、マッチ条件を指定して特定の条件に一致した場合のみ表示するようにします。

まずはffufで出力される結果を見ます。各リクエストごとに次のように表示されるはずです。

[Status: 200, Size: 13844, Words: 600, Lines: 273, Duration: 414ms]

上記の結果から次のことが分かります。

  • 応答コードは200
  • 応答サイズは13844
  • 応答文字数は600
  • 応答行数は273
  • 応答時間は414ms

これらの値を見ながらフィルター条件やマッチ条件を決めていきます。

特定の条件を指定して表示させないようにフィルターするには次のオプションを使います。

  • -fc 応答コードでフィルターする(複数指定可)
  • -fl 応答行数でフィルターする(複数指定可)
  • -fr フィルター条件を正規表現で指定する
  • -fs 応答サイズでフィルターする(複数指定可)
  • -ft 応答時間でフィルターする(応答時間が100msを超える場合をフィルタするなら -ft '>100'
  • -fw 応答文字数でフィルターする(複数指定可)

例:応答コード404と403を除外する

ffuf -fc 404,403 -u http://example.com/FUZZ -w /path/to/wordlist

マッチ条件(必要なものだけ表示)

特定の条件を指定して、条件にマッチしたものだけ表示させるには次のオプションを使います。

  • -mc 応答コードでマッチします(複数指定可)※-mc all ですべての応答コードにマッチさせる
  • -ml 応答行数でマッチします(複数指定可)
  • -mr マッチ条件を正規表現で指定する
  • -ms 応答サイズでマッチする(複数指定可)
  • -mt 応答時間でマッチする(応答時間が100msを超える場合にマッチさせるなら -mt '>100'
  • -mw 応答文字数でマッチする(複数指定可)

例:応答コード200と302のみ表示する

ffuf -mc 200,302 -u http://example.com/FUZZ -w /path/to/wordlist

例:応答内容が正規表現にマッチするものを表示する

-mrはパストラバーサルを検出したい場合などに便利です。次の例はパストラバーサルで/etc/passwdが表示されるとマッチします。

ffuf -mr "root:" -u 'http://example.com/index.php?file=FUZZ' -w /path/to/wordlist

再帰的にファジングする(ディレクトリ構造の深掘り)

ディレクトリが複数階層にわたる場合、発見したディレクトリ配下を自動で継続探索するには-recursionオプションを使います。

以下のようにするとディレクトリを発見した際、自動的に発見したディレクトリ配下をファジングします。

ffuf -u http://example.com/FUZZ -w /path/to/wordlist -recursion

複数の場所を同時にファジングする(例:DIRとFILE)

ffufはワードリストにキーワードを追加することによって複数の場所をファジングできます。指定方法は/path/to/wordlist:KEYWORDです。

ffuf -u http://example.com/DIR/FILE -w /path/to/wordlist/dir.txt:DIR,/path/to/wordlist/file.txt:FILE

この例ではDIRの箇所をdir.txtでファジングし、FILEの箇所をfile.txtでファジングします。キーワードのDIRFILEは任意なので好きな文字列に変更できます(FOOなど)。

なお、ファジングする場所は2つ以上指定できます。

デフォルト動作(clusterbomb)では最初に指定したワードリスト全体を反復処理してから2番目、3番目…と移動します。場所を増やしすぎると膨大な数のリクエストを送信することになるので注意してください。

拡張子を付与する

ワードリストから読み込んだ単語を送信後、単語に拡張子を付与した単語も送信します。拡張子はカンマ「,」で区切って複数指定できます。

ffuf -e .php,.zip,.bak -u http://example.com/FUZZ -w /path/to/wordlist

ワードリストのコメントを無視する

ffufはワードリストから読み込んだ単語をそのまま送信します。「#」などでコメントアウトした内容も例外ではないため、コメント行を含むワードリストを使う場合は-icオプションを使います。

ffuf -ic -u http://example.com/FUZZ -w /path/to/wordlist

リクエスト送信数を抑える(レート制御)

実運用環境やバグバウンティで短時間に大量リクエストを送ると WAF/IDS に引っかかったり、IP がブラックリスト化される可能性があります。レート制御や分散実行を駆使して安全に実施してください。

AkamaiのようなCDNでもレートリミット設定されている場合に通信が遮断される可能性があります。

秒間リクエスト数の指定(-rate)

-rateオプションで秒間リクエスト数を指定できるので、毎秒10リクエストに抑えたい場合は次のようにします。

ffuf -rate 10 -u http://example.com/FUZZ -w /path/to/wordlist

ffufとdirsearchの使い分け

ffufとdirsearchはアプローチ方法がまったく異なります。わたしの経験では、最初のアプローチはdirsearchの方が優れています。

あるサブドメインを見つけて、そこに隠されたディレクトリやファイルを探し出したい場合はdirsearchが効果的です。わたしはサブドメインを見つけたらdirsearchを実行する、という作業を自動化しています。

ffufは非常に柔軟性が高いため、ターゲットを絞って細かく調査したい場合に効果的です。隠されたエンドポイントなどを徹底的に探すにはffufが優れているでしょう。

比較観点ffufdirsearch
主用途柔軟なパラメータ/エンドポイントの精密探索サブドメイン配下やディレクトリ/ファイル列挙に特化
設定の柔軟性非常に高い(FUZZ の位置・ヘッダー・リクエスト細工)基本的にはディレクトリ探索に特化したオプション群
再帰探索あり(-recursion)あり
扱いやすさやや細かい設定が必要(慣れで克服)簡単に広く探せる(最初のスキャンに向く)
推奨ワークフローターゲットを絞って深掘りする段階で使用最初の幅広い探索に使用
使い分けのポイント
  • ターゲットを絞って詳細に調べたいときは ffuf
  • 広く探索したいときは dirsearch

まずは dirsearchで幅広くディレクトリを発見し、その後で見つかった候補に対してffufを使って深掘り、というワークフローが効果的です。

よくある質問

ffuf はどんな場面で使うべき?

特定のパラメータやパスを精密に調べたい場合に使います。ワイドレンジの初期スキャンは dirsearch 等で行い、発見した箇所を ffuf で深掘りするのが定石です。

Burp Intruder と ffuf の違いは?

Burp Intruder は GUI と連携した総合的なツールですが Community Edition では Intruder に制限があります。ffuf はコマンドラインで高速に大量リクエストを投げる用途に強みがあります。

無断で公開サーバに対して実行しても良い?

絶対にNGです。必ず対象の所有者から許可を得てください。法的・倫理的リスクがあります。

参考資料・リンク

まとめ

ffuf は高速で柔軟な HTTP ファジングツールです。実務ではdirsearchと組み合わせることで、探索の幅と深さの両方を効率的に確保できます。

ただし、常に許可された環境で実施し、レートやスレッドなどの設定で対象に過度な負荷をかけないように注意してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。
また、スパム対策のため投稿して頂いたコメントが表示されるまで時間がかかる場合があります。

目次