FFUFは、Go言語で実装された軽量かつ高並列なWebファジングツールであり、ディレクトリ探索、パラメータ列挙、エンドポイント発見などのセキュリティテストに広く活用されています。その設計は単純ながらも拡張性が高く、HTTPリクエストの送信効率と結果のフィルタリング精度を両立させています。
FFUFの主な技術的特徴
- 並列処理最適化:goroutineによる非同期リクエスト制御で、デフォルト40スレッドから最大数千レベルまでスケール可能
- マルチプレースホルダ対応:
FUZZだけでなく、FUZZ1、FUZZ2といった複数の置換位置を同時に扱える - 動的フィルタリング:ステータスコード、レスポンスボディ長、応答時間、正規表現マッチなど、6種類以上の条件で結果を絞り込み可能
- プロキシ・ヘッダー・認証のフルサポート:Burp SuiteやZAPとの連携、Basic/Digest認証、JWTベアラーもカバー
インストール方法(Linux/macOS)
バイナリ配布版の利用が推奨されます。以下は最新安定版v2.1.0のダウンロード手順です:
curl -L https://github.com/ffuf/ffuf/releases/download/v2.1.0/ffuf_2.1.0_linux_amd64.tar.gz | tar xz
sudo mv ffuf /usr/local/bin/
または、Homebrew(macOS)でもインストール可能です:
brew install ffuf
基本操作の再構成例
以下のコマンドは、example.comのルート下で有効なパスを検出するシンプルなスキャンです。ただし、本番環境では過剰な負荷を避けるため、遅延とスレッド数を明示的に調整しています:
ffuf \
-u "https://example.com/FUZZ" \
-w "/opt/wordlists/seclists/Discovery/Web-Content/common.txt" \
-t 15 \
-p "0.3" \
-mc 200,301,302 \
-fc 404,429 \
-o results.json \
-of json
高度な使用パターン
① パラメータ値の列挙(GETクエリ)
ffuf -u "https://api.example.com/items?id=FUZZ" -w ids.txt -H "Authorization: Bearer token123"
② POSTリクエストでのボディファジング
ffuf -u "https://example.com/login" -X POST -H "Content-Type: application/json" \
-d '{"username":"FUZZ","password":"test123"}' \
-w users.txt
③ 複数ワードリストの同時利用(例:ユーザー名+パスワードの組み合わせ)
ffuf -u "https://example.com/auth" -X POST \
-d '{"user":"FUZZ1","pass":"FUZZ2"}' \
-w users.txt:FUZZ1 -w passwords.txt:FUZZ2 \
-fr "invalid|error"
効果的な結果分析手法
大量のレスポンスから真正のヒットを抽出するには、以下の戦略が有効です:
-fs 0:空のレスポンスを除外-fw 10:単語数が10未満のレスポンスを除外(静的ページの雑音除去)-mr "Welcome|Dashboard|token":特定キーワードのみマッチ-ss:一致したレスポンスを標準出力に色付きで表示
運用上のベストプラクティス
- スキャン前に
-v(verbose)モードで1〜2件のテストリクエストを実行し、通信正常性を確認 - 企業環境では
--timeout 10でタイムアウトを明示的に設定し、ハング防止 - 大規模スキャン時は
--rate 50で秒間リクエスト数を制限(レート制限対策) - 結果の保存には
-of htmlを選択し、ブラウザでインタラクティブに閲覧可能
トラブルシューティングの要点
サーバー側でリクエストが拒否される場合、以下の順で対応を検討してください:
- スレッド数を
-t 5に減らす -p 1.0で固定遅延を導入- User-Agentをランダム化:
-H "User-Agent: FUZZ"+ UAリストをワードリストとして指定 - SSL/TLSバージョンを明示:
--tls-version tls1.2