
ffuf v2.2.1
Goで書かれた高速なWebファザー

ffuf - より速くファズれ、愚か者よ
Go で書かれた高速な Web ファザーです。
インストール
-
ダウンロード リリースページ からプリビルドバイナリを入手し、解凍して実行してください!
または
-
Windows で Scoop を使用している場合、ffuf は次のコマンドでインストールできます:
scoop install ffufまたは
-
Windows で Winget を使用している場合、ffuf は次のコマンドでインストールできます:
winget install ffuf.ffufまたは
-
macOS で homebrew を使用している場合、ffuf は次のコマンドでインストールできます:
brew install ffufまたは
-
最新の Go コンパイラがインストールされている場合:
go install github.com/ffuf/ffuf/v2@latest(アップデート時も同じコマンド)または
-
git clone https://github.com/ffuf/ffuf ; cd ffuf ; go get ; go build
- ffuf は Go 1.20 以上に依存しています。
- チェックアウトからの Go ビルドでは、タグではなく
git-<日付>-<コミット>と表示されます。ローカルビルドは、たとえタグ上にいても公式リリースではありません。Go の組み込みビルド情報にはコミットは含まれますがタグ名は含まれないため、ビルド元の正確なコミットを表示しています。公式のバージョン付きバイナリはリリースページにあります。
使用例
以下の使用例は、ffuf で実行できる最も単純なタスクを示しています。
より多くの例を含む詳細なドキュメントは、ffuf wiki にあります: https://github.com/ffuf/ffuf/wiki
実際の使用例やヒントを含むより詳細なドキュメントについては、Michael Skelton (@codingo) による素晴らしいガイド「FFUF について知っておくべきすべてのこと」もご覧ください。
また、Docker コンテナ https://github.com/adamtlangley/ffufme をローカルで使用するか、Adam Langley @adamtlangley が作成したホスト版 http://ffuf.me に対して、実際のホスト上で ffuf スキャンを練習することもできます。
典型的なディレクトリ発見
URL の末尾に FUZZ キーワードを使用します (-u):
ffuf -w /path/to/wordlist -u https://target/FUZZ
バーチャルホスト発見(DNS レコードなし)
デフォルトのバーチャルホストのレスポンスサイズが 4242 バイトであると仮定し、そのサイズのレスポンスをフィルタリング (-fs 4242) しながら Host ヘッダーをファジングします:
ffuf -w /path/to/vhost/wordlist -u https://target -H "Host: FUZZ" -fs 4242
GET パラメータファジング
GET パラメータ名のファジングはディレクトリ発見と非常に似ており、URL の一部として FUZZ キーワードを定義します。ここでも、無効な GET パラメータ名に対するレスポンスサイズが 4242 バイトであると仮定します。
ffuf -w /path/to/paramnames.txt -u https://target/script.php?FUZZ=test_value -fs 4242
パラメータ名がわかっている場合、同じ方法で値をファジングできます。この例では、間違ったパラメータ値に対して HTTP レスポンスコード 401 が返されると仮定します。
ffuf -w /path/to/values.txt -u https://target/script.php?valid_name=FUZZ -fc 401
POST データファジング
これも非常に簡単で、再び FUZZ キーワードを使用します。この例では POST リクエストの一部のみをファジングしています。401 レスポンスをフィルタリングしています。
ffuf -w /path/to/postdata.txt -X POST -d "username=admin\&password=FUZZ" -u https://target/login.php -fc 401
最大実行時間
ffuf を無期限に実行したくない場合は、-maxtime を使用します。これにより、指定した時間(秒)後に プロセス全体 が停止します。
ffuf -w /path/to/wordlist -u https://target/FUZZ -maxtime 60
再帰処理を使用する場合、-maxtime-job を使用して ジョブごと の最大時間を制御できます。これにより、現在のジョブが指定した時間(秒)後に停止し、次のジョブに進みます。再帰機能がサブディレクトリを検出すると新しいジョブが作成されます。
ffuf -w /path/to/wordlist -u https://target/FUZZ -maxtime-job 60 -recursion -recursion-depth 2
両方のフラグを組み合わせて、ジョブごとの最大実行時間と全体の実行時間を制限することも可能です。再帰を使用しない場合、両方のフラグは同じ動作をします。
外部ミューテーターを使用したテストケースの生成
この例では、POST で送信される JSON データをファジングします。ミューテーターとして Radamsa を使用します。
--input-cmd を使用すると、ffuf はマッチをその位置として表示します。この同じ位置の値は、環境変数 $FFUF_NUM として呼び出し側で利用可能になります。この位置の値をミューテーターのシードとして使用します。ファイル example1.txt と example2.txt には有効な JSON ペイロードが含まれています。すべてのレスポンスをマッチさせますが、レスポンスコード 400 - Bad request をフィルタリングします:
ffuf --input-cmd 'radamsa --seed $FFUF_NUM example1.txt example2.txt' -H "Content-Type: application/json" -X POST -u https://ffuf.io.fi/FUZZ -mc all -fc 400
ペイロードごとにミューテーターを呼び出すのは非効率的です。そのため、ペイロードを事前に生成することもできます。ここでも Radamsa を例にします:
# 1000 個のサンプルペイロードを生成
radamsa -n 1000 -o %n.txt example1.txt example2.txt
# これにより 1.txt ... 1000.txt のファイルが作成されます
# あとは ffuf のためにファイルからペイロードデータをループで読み込むだけです
ffuf --input-cmd 'cat $FFUF_NUM.txt' -H "Content-Type: application/json" -X POST -u https://ffuf.io.fi/ -mc all -fc 400
設定ファイル
ffuf を実行すると、最初にデフォルトの設定ファイルが存在するか確認します。ffufrc ファイルのデフォルトパスは $XDG_CONFIG_HOME/ffuf/ffufrc です。このファイルで 1 つ以上のオプションを設定でき、以降のすべての ffuf ジョブに適用されます。ffufrc ファイルの例は こちら にあります。
設定ファイルの場所に関する詳細な説明は、wiki にあります: https://github.com/ffuf/ffuf/wiki/Configuration
コマンドラインで指定した設定オプションは、デフォルトの ffufrc ファイルから読み込まれたものを上書きします。
注: これは複数回指定可能な CLI フラグには適用されません。その例の 1 つが -H(ヘッダー)フラグです。この場合、コマンドラインで指定された -H の値は、設定ファイルのものに 追加 されます。
さらに、異なるユースケースに複数の設定ファイルを使用したい場合は、-config コマンドラインフラグを使用して設定ファイルのパスを定義できます。このフラグは設定ファイルへのパスを引数として受け取ります。
使い方
ffuf のテストケースを定義するには、URL (-u)、ヘッダー (-H)、または POST データ (-d) のどこかにキーワード FUZZ を使用します。
Fuzz Faster U Fool - v2.1.0
HTTP オプション:
-H ヘッダー `"名前: 値"`。コロンで区切ります。複数の -H フラグを受け付けます。
-X 使用する HTTP メソッド
-b curl コピー機能のための Cookie データ `"NAME1=VALUE1; NAME2=VALUE2"`。
-cc 認証用のクライアント証明書。これを使用するにはクライアントキーも定義する必要があります。
-ck 認証用のクライアントキー。これを使用するにはクライアント証明書も定義する必要があります。
-d POST データ
-http2 HTTP2 プロトコルを使用する (デフォルト: false)
-ignore-body レスポンスの内容を取得しない (デフォルト: false)
-r リダイレクトを追跡する (デフォルト: false)
-raw URI をエンコードしない (デフォルト: false)
-recursion 再帰的にスキャンする。FUZZ キーワードのみサポートされ、URL (-u) はそれで終わる必要があります。 (デフォルト: false)
-recursion-depth 最大再帰深度 (デフォルト: 0)
-recursion-strategy 再帰戦略: "default" はリダイレクトベース、"greedy" はすべてのマッチに対して再帰 (デフォルト: default)
-replay-proxy マッチしたリクエストをこのプロキシで再生する
-sni ターゲット TLS SNI。FUZZ キーワードはサポートしません。
-timeout HTTP リクエストのタイムアウト (秒) (デフォルト: 10)
-u ターゲット URL
-x プロキシ URL (SOCKS5 または HTTP)。例: http://127.0.0.1:8080 または socks5://127.0.0.1:8080
一般オプション:
-V バージョン情報を表示する (デフォルト: false)
-ac フィルタリングオプションを自動調整する (デフォルト: false)
-acc カスタム自動調整文字列。複数回使用可能。-ac を含意します。
-ach ホストごとの自動調整 (デフォルト: false)
-ack 自動調整キーワード (デフォルト: FUZZ)
-acs カスタム自動調整戦略。複数回使用可能。-ac を含意します。
-c 出力を色付けする (デフォルト: false)
-config ファイルから設定を読み込む
-json 改行区切りの JSON レコードを出力する JSON 出力 (デフォルト: false)
-maxtime プロセス全体の最大実行時間 (秒) (デフォルト: 0)
-maxtime-job ジョブごとの最大実行時間 (秒) (デフォルト: 0)
-noninteractive インタラクティブコンソール機能を無効にする (デフォルト: false)
-p リクエスト間の `遅延` (秒)、またはランダムな遅延の範囲。例: "0.1" または "0.1-2.0"
-rate 1秒あたりのリクエストレート (デフォルト: 0)
-s 追加情報を表示しない (サイレントモード) (デフォルト: false)
-sa すべてのエラーケースで停止する。-sf と -se を含意します。 (デフォルト: false)
-scraperfile カスタムスクレイパーファイルのパス
-scrapers アクティブなスクレイパーグループ (デフォルト: all)
-se 不必要なエラーで停止する (デフォルト: false)
-search ffuf 履歴から FFUFHASH ペイロードを検索する
-sf レスポンスの 95% 以上が 403 Forbidden を返した場合に停止する (デフォルト: false)
-t 同時スレッド数 (デフォルト: 40)
-v 詳細出力。完全な URL と (ある場合は) リダイレクト先を結果とともに表示する (デフォルト: false)
マッチャーオプション:
-mc マッチする HTTP ステータスコード、または "all" ですべて。 (デフォルト: 200-299,301,302,307,401,403,405,500)
-ml レスポンスの行数でマッチ
-mmode マッチャーセット演算子。and または or (デフォルト: or)
-mr 正規表現でマッチ
-ms HTTP レスポンスサイズでマッチ
-mt 最初のレスポンスバイトまでのミリ秒数でマッチ。>100 または <100 のように指定。
-mw レスポンスの単語数でマッチ
フィルターオプション:
-fc レスポンスから HTTP ステータスコードをフィルタリング。コードと範囲のカンマ区切りリスト
-fl レスポンスの行数でフィルタリング。行数と範囲のカンマ区切りリスト
-fmode フィルターセット演算子。and または or (デフォルト: or)
-fr 正規表現でフィルタリング
-fs HTTP レスポンスサイズでフィルタリング。サイズと範囲のカンマ区切りリスト
-ft 最初のレスポンスバイトまでのミリ秒数でフィルタリング。>100 または <100 のように指定。
-fw レスポンスの単語数でフィルタリング。単語数と範囲のカンマ区切りリスト
入力オプション:
-D DirSearch ワードリスト互換モード。-e フラグと組み合わせて使用。 (デフォルト: false)
-e 拡張子のカンマ区切りリスト。FUZZ キーワードを拡張します。
-enc キーワード用エンコーダー。例: 'FUZZ:urlencode b64encode'
-ic ワードリストのコメントを無視する (デフォルト: false)
-input-cmd 入力を生成するコマンド。この入力方法を使用する場合は --input-num が必要です。-w を上書きします。
-input-num テストする入力の数。--input-cmd と組み合わせて使用。 (デフォルト: 100)
-input-shell コマンド実行に使用するシェル
-mode マルチワードリスト動作モード。利用可能なモード: clusterbomb, pitchfork, sniper (デフォルト: clusterbomb)
-request 生の HTTP リクエストを含むファイル
-request-proto 生のリクエストと共に使用するプロトコル (デフォルト: https)
-w ワードリストファイルのパスと (任意の) キーワードをコロンで区切って指定。例: '/path/to/wordlist:KEYWORD'
出力オプション:
-debug-log すべての内部ログを指定されたファイルに書き込む
-o 出力をファイルに書き込む
-od マッチした結果を保存するディレクトリのパス
-of 出力ファイル形式。利用可能な形式: json, ejson, html, md, csv, ecsv (または 'all' ですべての形式) (デフォルト: json)
-or 結果がない場合に出力ファイルを作成しない (デフォルト: false)
使用例:
wordlist.txt からファイルパスをファジングし、すべてのレスポンスをマッチさせるが、コンテンツサイズ 42 はフィルタリングする。
色付き、詳細出力。
ffuf -w wordlist.txt -u https://example.org/FUZZ -mc all -fs 42 -c -v
Host ヘッダーをファジングし、HTTP 200 レスポンスにマッチ。
ffuf -w hosts.txt -u https://example.org/ -H "Host: FUZZ" -mc 200
POST JSON データをファジング。テキスト "error" を含まないすべてのレスポンスにマッチ。
ffuf -w entries.txt -u https://example.org/ -X POST -H "Content-Type: application/json" \
-d '{"name": "FUZZ", "anotherkey": "anothervalue"}' -fr "error"
複数の場所をファジング。"VAL" キーワードの値を反映したレスポンスのみにマッチ。色付き。
ffuf -w params.txt:PARAM -w values.txt:VAL -u https://example.org/?PARAM=VAL -mr "VAL" -c
詳細情報と例: https://github.com/ffuf/ffuf
インタラクティブモード
ffuf 実行中に ENTER キーを押すと、プロセスが一時停止され、シェル風のインタラクティブモードになります:
インタラクティブモードに入りました
コマンド一覧を見るには "help" を、再開するには ENTER を押してください。
> help
使用可能なコマンド:
afc [値] - ステータスコードフィルターに追加
fc [値] - ステータスコードフィルターを (再) 設定
afl [値] - 行数フィルターに追加
fl [値] - 行数フィルターを (再) 設定
afw [値] - 単語数フィルターに追加
fw [値] - 単語数フィルターを (再) 設定
afs [値] - サイズフィルターに追加
fs [値] - サイズフィルターを (再) 設定
aft [値] - 時間フィルターに追加
ft [値] - 時間フィルターを (再) 設定
rate [値] - 1秒あたりのリクエストレートを調整 (現在: 0)
queueshow - ジョブキューを表示
queuedel [番号] - キュー内のジョブを削除
queueskip - 次のキュー済みジョブに進む
restart - 現在の ffuf ジョブを再起動して再開
resume - 現在の ffuf ジョブを再開 (または ENTER)
show - 現在のジョブの結果を表示
savejson [ファイル名] - 現在のマッチをファイルに保存
help - 今見ているのがこれです
>
このモードでは、フィルターの再設定、キューの管理、現在の状態のディスクへの保存が可能です。
フィルターを (再) 設定すると、それらは事後的に適用され、新しく追加されたフィルターで除外されるはずだったメモリ内の誤検出マッチがすべて削除されます。
新しいマッチの状態は show コマンドで出力でき、ffuf が見つけたかのようにすべてのマッチが表示されます。
「ネガティブ」マッチはメモリに保存されないため、フィルターを緩和しても失われたマッチを復元することはできません。このようなシナリオでは、ユーザーは restart コマンドを使用できます。これにより状態がリセットされ、現在のジョブが最初から開始されます。
コントリビューション
バグ報告、機能リクエスト、プルリクエストを歓迎します。開始するには CONTRIBUTING.md を参照し、アーキテクチャとテストのドキュメントについては wiki のコントリビューションセクション を参照してください。
ライセンス
ffuf は MIT ライセンスの下で公開されています。詳細は LICENSE をご覧ください。

