ffufとは?
ffuf (Fuzz Faster U Fool) は、Go言語で書かれた非常に高速なWebファジングツールです。主にペネトレーションテスターやセキュリティ研究者によって、Webアプリケーションの隠されたファイル、ディレクトリ、サブドメイン、パラメータなどを発見するために使用されます。
他の同様のツール(例えば、古くからあるdirb
など)と比較して、ffufは以下のような特徴を持っています。
- 高速性: Go言語の並行処理能力を活かし、多数のスレッドで高速なスキャンを実現します。
- 柔軟性: URLパスだけでなく、HTTPヘッダー(例: HostヘッダーによるVirtual Host発見)、POSTデータ、GETパラメータなど、リクエストの様々な部分をファジングできます。
- 豊富なオプション: 結果のフィルタリング、再帰的なスキャン、プロキシ経由での実行、出力形式の指定など、多彩なオプションが用意されています。
- 活発な開発: オープンソースプロジェクトとして開発が続けられており、新機能の追加や改善が行われています。バージョン2.0(2023年2月リリース)では、レスポンスから特定の情報を抽出する「Scraper」機能や、設定ファイルの標準的な場所への対応などが追加されました。
「ファジング」とは、ソフトウェアの予期せぬ動作や脆弱性を発見するために、意図的に大量の、あるいは予期しないデータを入力として与えるテスト手法です。ffufは、Webアプリケーションに対して、辞書(ワードリスト)に含まれる単語を使って大量のリクエストを送り、その応答(HTTPステータスコード、レスポンスサイズなど)を分析することで、隠されたコンテンツや設定ミスを発見します。
ffufは、単なるディレクトリ/ファイルスキャナー(Buster系ツール)にとどまらず、より広範なWebファジングタスクに対応できる強力なツールです。
インストール方法
ffufを利用するにはいくつかのインストール方法があります。
Go言語を使ったインストール (推奨)
Go言語 (バージョン 1.16 以上) がインストールされていれば、以下のコマンドで簡単にインストールおよびアップデートが可能です。
go install github.com/ffuf/ffuf/v2@latest
インストール後、$GOPATH/bin
(通常は $HOME/go/bin
) にパスが通っていれば、ffuf
コマンドが利用可能になります。
パッケージマネージャを使ったインストール
Kali Linuxなどのディストリビューションでは、パッケージマネージャを使ってインストールできます。
sudo apt update && sudo apt install ffuf
macOSの場合はHomebrewが利用可能です。
brew install ffuf
バイナリのダウンロード
GitHubのリリースページから、お使いのOSに対応したコンパイル済みのバイナリファイルをダウンロードして利用することも可能です。 GitHub Releases
# 例: Linux (amd64) の場合
wget https://github.com/ffuf/ffuf/releases/download/v2.1.0/ffuf_2.1.0_linux_amd64.tar.gz
tar xzvf ffuf_2.1.0_linux_amd64.tar.gz
sudo mv ffuf /usr/local/bin/
ソースからビルド
最新の開発版を試したい場合などは、ソースコードからビルドすることもできます。
git clone https://github.com/ffuf/ffuf
cd ffuf
go get
go build
基本的な使い方 💡
ffufの最も基本的な使い方は、指定したURLに対してワードリストを用いたディレクトリやファイルの探索です。これには最低限、-u
(ターゲットURL) と -w
(ワードリスト) の2つのオプションが必要です。
重要なのは、URLやヘッダー、POSTデータなど、ファジングしたい箇所に FUZZ
というキーワードをプレースホルダーとして挿入することです。ffufはこの FUZZ
キーワードをワードリストの各行の内容に置き換えてリクエストを送信します。
ディレクトリ/ファイル探索の例
例として、https://example.com/
配下のディレクトリやファイルを探索してみましょう。ワードリストには common.txt
を使用します。
ffuf -w /path/to/wordlists/common.txt -u https://example.com/FUZZ
このコマンドを実行すると、ffufは以下のような処理を行います。
common.txt
から1行ずつ単語(例: “admin”, “login”, “config.php” など)を読み込みます。https://example.com/FUZZ
のFUZZ
部分を読み込んだ単語で置き換えます (例:https://example.com/admin
,https://example.com/login
,https://example.com/config.php
)。- 生成されたURLに対してHTTPリクエストを送信します。
- サーバーからのレスポンス(ステータスコード、サイズなど)を取得し、デフォルトではステータスコード 200, 204, 301, 302, 307, 401, 403, 405, 500 の結果を表示します。
出力例
実行結果は以下のように表示されます(内容はターゲットやワードリストによって異なります)。
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0
________________________________________________
:: Method : GET
:: URL : https://example.com/FUZZ
:: Wordlist : FUZZ: /path/to/wordlists/common.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403,405,500
________________________________________________
admin [Status: 301, Size: 0, Words: 1, Lines: 1]
login.php [Status: 200, Size: 1532, Words: 210, Lines: 55]
images [Status: 403, Size: 212, Words: 20, Lines: 10]
.htaccess [Status: 403, Size: 212, Words: 20, Lines: 10]
README [Status: 200, Size: 4934, Words: 637, Lines: 120]
config/ [Status: 403, Size: 212, Words: 20, Lines: 10]
:: Progress: [4611/4611] :: Job [1/1] :: 150 req/sec :: Duration: [0:00:30] :: Errors: 0 ::
出力には、見つかったパス (FUZZ
に代入された値)、レスポンスのステータスコード、コンテンツサイズ、単語数、行数が表示されます。
この基本操作を理解すれば、様々なオプションを組み合わせてより高度なファジングを行うことができます。
-c
オプションを付けると、出力が色付きになり、ステータスコードごとに色分けされるため、結果が見やすくなります。
主要なオプション解説
ffufには多数のオプションがあり、スキャンの挙動を細かく制御できます。ここでは特によく使われる重要なオプションを解説します。
ターゲット指定
オプション | 説明 | 例 |
---|---|---|
-u <URL> |
ターゲットURLを指定します。FUZZ キーワードを含める必要があります。 |
-u https://example.com/FUZZ |
-X <METHOD> |
使用するHTTPメソッドを指定します (デフォルト: GET)。 | -X POST |
-H <ヘッダー> |
カスタムHTTPヘッダーを追加します。複数指定可能です。FUZZ キーワードを使用できます。 |
-H "User-Agent: MyFuzzer" -H "Host: FUZZ.example.com" |
-d <データ> |
POSTリクエストのボディデータを指定します。FUZZ キーワードを使用できます。 |
-d "user=admin&pass=FUZZ" |
-b <クッキー> |
クッキーデータを指定します。 | -b "sessionid=abcdef12345" |
-x <プロキシURL> |
リクエストを送信するためのプロキシサーバーを指定します (HTTPまたはSOCKS5)。 | -x http://127.0.0.1:8080 |
-r |
HTTPリダイレクトを追跡します (デフォルト: false)。 | -r |
-recursion |
発見されたディレクトリに対して再帰的にスキャンを実行します (デフォルト: false)。URLはFUZZ で終わる必要があります。 |
-recursion |
-recursion-depth <数値> |
再帰スキャンの最大深度を指定します (デフォルト: 0=無限)。 | -recursion-depth 2 |
-recursion-strategy <戦略> |
再帰戦略を指定します。”default” (リダイレクトベース) または “greedy” (全てのマッチで再帰)。(デフォルト: default) | -recursion-strategy greedy |
ワードリスト
オプション | 説明 | 例 |
---|---|---|
-w <ファイルパス[:キーワード]> |
使用するワードリストのパスを指定します。コロン(:)の後にカスタムキーワードを指定することで、複数のワードリストとFUZZ キーワードを使い分けることができます (例: -w user.txt:USER -w pass.txt:PASS )。 |
-w common.txt -w /usr/share/seclists/Discovery/Web-Content/common.txt:FUZZ |
-e <拡張子リスト> |
ワードリストの各項目に付与する拡張子をカンマ区切りで指定します。 | -e .php,.txt,.bak |
-mode <モード> |
複数のワードリストを使用する場合のモードを指定します。”clusterbomb” または “pitchfork”。 (デフォルト: clusterbomb) | -mode pitchfork |
-ic |
ワードリスト内の大文字/小文字を無視します。 | -ic |
マッチング (結果に含める条件)
オプション | 説明 | 例 |
---|---|---|
-mc <コードリスト> |
指定したHTTPステータスコードに一致するレスポンスのみを表示します (カンマ区切り)。デフォルトは 200,204,301,302,307,401,403,405,500 です。v2.1.0以降ではデフォルトで2xx系のコードをマッチします。 | -mc 200,302 |
-ms <サイズ> |
指定したレスポンスボディサイズ (バイト) に一致するレスポンスのみを表示します。 | -ms 1024 |
-ml <行数> |
指定したレスポンスボディの行数に一致するレスポンスのみを表示します。 | -ml 50 |
-mw <単語数> |
指定したレスポンスボディの単語数に一致するレスポンスのみを表示します。 | -mw 150 |
-mr <正規表現> |
指定した正規表現にレスポンスボディが一致する場合のみ表示します。 | -mr "Login successful" |
-mt <秒数> |
指定した時間 (秒) 以内にレスポンスが返ってきた場合のみ表示します。 | -mt 5 |
フィルタリング (結果から除外する条件)
オプション | 説明 | 例 |
---|---|---|
-fc <コードリスト> |
指定したHTTPステータスコードに一致するレスポンスを除外します (カンマ区切り)。 | -fc 404,403 |
-fs <サイズ> |
指定したレスポンスボディサイズ (バイト) に一致するレスポンスを除外します。特定のサイズの「Not Found」ページなどを除外するのに便利です。 | -fs 12345 |
-fl <行数> |
指定したレスポンスボディの行数に一致するレスポンスを除外します。 | -fl 10 |
-fw <単語数> |
指定したレスポンスボディの単語数に一致するレスポンスを除外します。 | -fw 5 |
-fr <正規表現> |
指定した正規表現にレスポンスボディが一致する場合を除外します。 | -fr "Page not found" |
-ft <秒数> |
指定した時間 (秒) 以上かかったレスポンスを除外します。 | -ft 10 |
-mc 200 -fs 12345
とすると、「ステータスコード200」で、かつ「サイズが12345バイトではない」レスポンスが表示されます。
スレッドと時間制御
オプション | 説明 | 例 |
---|---|---|
-t <数値> |
同時に実行するスレッド数を指定します (デフォルト: 40)。値を大きくすると高速になりますが、ターゲットサーバーへの負荷が増加し、レートリミットを受ける可能性が高まります。 | -t 100 |
-p <秒数> |
各リクエスト間に指定した秒数の遅延を入れます。 | -p 0.5 |
-rate <数値> |
1秒あたりの最大リクエスト数を指定します。 | -rate 50 |
-timeout <秒数> |
HTTPリクエストのタイムアウト時間を秒単位で指定します (デフォルト: 10)。 | -timeout 5 |
-maxtime <秒数> |
スキャン全体の最大実行時間を秒単位で指定します。指定時間経過後、プロセス全体が停止します。 | -maxtime 3600 (1時間) |
-maxtime-job <秒数> |
再帰スキャン時に、各ジョブ(発見されたディレクトリ毎のスキャン)の最大実行時間を秒単位で指定します。 | -maxtime-job 600 (10分) |
出力
オプション | 説明 | 例 |
---|---|---|
-o <ファイルパス> |
スキャン結果を指定したファイルに出力します。 | -o results.json |
-of <フォーマット> |
出力ファイルのフォーマットを指定します (json, ejson, html, md, csv, ecsv)。デフォルトは json です。 | -of html |
-s |
サイレントモード。バナーや進捗状況を表示せず、結果のみを表示します。 | -s |
-v |
詳細モード。リダイレクト先のURLなど、より詳細な情報を表示します。 | -v |
-c |
出力をカラー表示します。 | -c |
その他
オプション | 説明 | 例 |
---|---|---|
-ac |
自動キャリブレーション。スキャン開始前にいくつかのリクエストを送信し、一般的な「Not Found」レスポンスなどを自動的にフィルタリングします。 | -ac |
-config <ファイルパス> |
設定ファイルを指定します。コマンドラインオプションよりも優先度が低くなります。 | -config myconfig.toml |
-V |
バージョン情報を表示します。 | -V |
-h |
ヘルプメッセージを表示します。 | -h |
$XDG_CONFIG_HOME/ffuf/ffufrc
、なければ ~/.config/ffuf/ffufrc
)を読み込みます。よく使うオプションをここに記述しておくと便利です。コマンドラインで指定したオプションは設定ファイルの内容を上書きします(ただし -H
など複数指定可能なオプションは追記されます)。
実践的なユースケース 💪
基本的な使い方とオプションを理解したところで、より実践的なffufの活用例を見ていきましょう。
1. サブドメインの列挙 (Virtual Host Fuzzing)
DNSレコードには存在しないが、Webサーバー側で設定されている仮想ホスト(サブドメイン)を発見するために、Host
ヘッダーをファジングします。
まず、対象ドメイン (例: example.com
) の通常のレスポンスサイズを確認します(存在しないホスト名を指定した場合など)。ここでは仮に 1234
バイトだとします。このサイズを -fs
でフィルタリングすることで、異なる応答を返す有効なサブドメインを見つけやすくします。
# サブドメイン用のワードリスト (例: subdomains.txt) を用意する
# 例: /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt など
ffuf -w /path/to/subdomains.txt -u https://example.com -H "Host: FUZZ.example.com" -fs 1234
このコマンドは、subdomains.txt
の各行 (例: “dev”, “staging”, “admin”) を FUZZ
に代入し、Host: dev.example.com
, Host: staging.example.com
のようなリクエストを送信します。レスポンスサイズが 1234
バイト以外のものが表示されれば、有効なサブドメインである可能性が高いです。
/etc/hosts
ファイル(Windowsの場合は C:\Windows\System32\drivers\etc\hosts
)にIPアドレスとホスト名の対応を追記する必要があります。
# 例
192.168.1.100 dev.example.com
2. GETパラメータのファジング
Webアプリケーションが受け付ける隠されたGETパラメータ名や、特定のパラメータに対する脆弱な値を探します。
パラメータ名のファジング
URLのクエリ文字列部分に FUZZ
を指定します。存在しないパラメータを指定した場合のレスポンスサイズ (例: 567
バイト) を -fs
で除外します。
# パラメータ名用のワードリスト (例: params.txt) を用意
# 例: /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt
ffuf -w /path/to/params.txt -u "https://example.com/search?FUZZ=test" -fs 567
これにより、https://example.com/search?debug=test
, https://example.com/search?id=test
のようなリクエストが試されます。
パラメータ値のファジング
特定のパラメータ (例: id
) に対して、様々な値を試します。SQLインジェクションや他の脆弱性を探す際に有効です。
# SQLiペイロードなどが含まれるワードリスト (例: sqli.txt) を用意
ffuf -w /path/to/sqli.txt -u "https://example.com/product?id=FUZZ"
3. POSTパラメータのファジング
ログインフォームなど、POSTリクエストで送信されるパラメータをファジングします。
パスワードのブルートフォース
ユーザー名 “admin” に対して、パスワードをワードリスト (passwords.txt
) から試します。ログイン失敗時のレスポンス (例: “Invalid credentials” という文字列を含む) を -fr
で除外します。
ffuf -w /path/to/passwords.txt -X POST -d "username=admin&password=FUZZ" -H "Content-Type: application/x-www-form-urlencoded" -u https://example.com/login -fr "Invalid credentials"
JSONペイロードのファジング
APIエンドポイントなどでJSON形式のリクエストボディをファジングする場合、Content-Type
ヘッダーを適切に設定し、-d
オプションのデータ内に FUZZ
を含めます。
ffuf -w /path/to/payloads.txt -X POST -H "Content-Type: application/json" -d '{"userId":"FUZZ","role":"user"}' -u https://api.example.com/v1/users
4. 特定の拡張子のファイル探索
-e
オプションを使って、バックアップファイル (.bak
, .old
) や設定ファイル (.config
, .env
) など、特定の拡張子を持つファイルを探します。
ffuf -w /path/to/directories.txt -u https://example.com/FUZZ -e .bak,.old,.config,.env,.sql,.zip -mc 200
この例では、directories.txt
に含まれるディレクトリ名やファイル名に、指定した拡張子を付与してリクエストを送信し、ステータスコード 200 のものだけを表示します。
5. 複数の場所を同時にファジング
カスタムキーワードを使って、URLの異なる部分やヘッダーなどを同時にファジングできます。
例: サブドメイン (VHOST
) とディレクトリ (PATH
) を同時にファジング
ffuf -w /path/to/subdomains.txt:VHOST -w /path/to/directories.txt:PATH -u https://VHOST.example.com/PATH -H "Host: VHOST.example.com"
この場合、-mode
オプション (clusterbomb
または pitchfork
) で挙動が変わります。
- clusterbomb (デフォルト): 全ての組み合わせを試します (subdomains.txt の各項目 × directories.txt の各項目)。リクエスト数が多くなります。
- pitchfork: ワードリストの同じ行にある項目を組み合わせて試します (1行目のサブドメインと1行目のディレクトリ、2行目のサブドメインと2行目のディレクトリ、…)。リクエスト数はワードリストの行数と同じになります。
-mode pitchfork
は、例えばユーザー名リストとパスワードリストを使ってログイン試行を行う際に、リストの対応する行同士 (user1/pass1, user2/pass2, …) を試したい場合に有効です。
6. 結果のフィルタリング活用
ノイズとなる不要な結果を除外し、関心のある情報だけを表示するためにフィルタリングは非常に重要です。
例: 一般的な Not Found ページ (サイズ: 12345バイト) とアクセス拒否 (403) を除外し、管理者用ページ (URLに “admin” を含む) に関連する結果のみを表示
ffuf -w common.txt -u https://example.com/FUZZ -fc 403 -fs 12345 -mr "/admin"
-ac
(自動キャリブレーション) オプションも、一般的なエラーページを自動でフィルタリングしてくれるため便利です。
7. 再帰スキャンによる深掘り
-recursion
オプションを使うと、発見したディレクトリに対してさらにサブディレクトリやファイルを探索できます。
# /admin を発見したら、さらに /admin/FUZZ をスキャンする
ffuf -w common.txt -u https://example.com/FUZZ -recursion -recursion-depth 1 -e .php -fc 404
-recursion-depth
で探索する階層の深さを制限できます。-recursion-strategy greedy
を使うと、ステータスコードに関わらずマッチした全てのエントリに対して再帰的に探索します(注意して使用)。
ワードリストについて 📚
ffufの効果は、使用するワードリストの質に大きく依存します。適切なワードリストを選ぶことが、隠されたコンテンツを発見する鍵となります。
ワードリストの重要性
ワードリストは、ffufが試行するディレクトリ名、ファイル名、パラメータ名などの候補リストです。ターゲットとするWebアプリケーションの特性(使用されている技術スタック、言語、フレームワークなど)に合わせて最適化されたワードリストを使用することで、スキャンの効率と発見率を高めることができます。
代表的なワードリストリポジトリ: SecLists
SecLists は、セキュリティテストで使用される多様なワードリストを集めた非常に有名なリポジトリです。以下のようなカテゴリのワードリストが含まれています。
- Discovery/Web-Content: ディレクトリ名、ファイル名、一般的なWebコンテンツ (例:
common.txt
,directory-list-2.3-medium.txt
,raft-large-directories.txt
) - Discovery/DNS: サブドメイン名 (例:
subdomains-top1million-5000.txt
) - Usernames: 一般的なユーザー名
- Passwords: よく使われるパスワード、漏洩したパスワードリスト
- Fuzzing: 様々な脆弱性テスト用のペイロード
Kali Linuxなどでは、/usr/share/seclists/
配下にインストールされていることが多いです。
# SecLists の一般的なワードリストを使ったディレクトリファジング
ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u https://example.com/FUZZ
その他のワードリスト
- Specific Framework/CMS Lists: WordPress, Drupal, Joomlaなど、特定のCMSやフレームワークに特化したワードリストも存在します。ターゲットが特定できている場合に有効です。
- Godfatherorwa Lists: 特定の技術スタックに合わせたワードリストを提供しているリポジトリもあります。
- カスタムワードリスト: ターゲットに関する情報(企業名、製品名、開発者名など)を元に独自のワードリストを作成したり、他のツール(例: CeWL)でサイトから単語を抽出してリスト化することも有効な戦略です。
ワードリスト選択の戦略
- まずは小さく始める: 最初は比較的小さなリスト (例:
common.txt
,directory-list-2.3-small.txt
) で素早くスキャンし、基本的な発見を試みます。 - 徐々に大きく: より網羅的な探索が必要な場合は、中規模〜大規模なリスト (例:
directory-list-2.3-medium.txt
,raft-large-directories.txt
) を使用します。ただし、時間がかかることと、サーバーへの負荷に注意が必要です。 - ターゲットに合わせて特化: ターゲットの技術スタックが判明している場合は、それに応じたワードリストを選択します。
- フィルタリングと組み合わせる: 大きなリストを使用する場合でも、適切なフィルタリングを行うことでノイズを減らし、重要な発見を見逃さないようにします。
#
で始まるコメント行が含まれることがあります。ffufはデフォルトでこれらを無視しますが、-ignore-comment
オプションで挙動を変更できます (通常は不要)。
注意点とベストプラクティス ⚠️
ffufは非常に強力なツールですが、その使用には注意が必要です。以下の点に留意し、責任ある利用を心がけてください。
1. 法的・倫理的な考慮事項
- 許可された対象にのみ使用する: ffufを含むあらゆるセキュリティテストツールは、明示的に許可を得た自身の管理するシステム、またはテスト許可のあるシステムに対してのみ使用してください。許可なく他者のシステムをスキャンする行為は、不正アクセス禁止法などの法律に抵触し、処罰の対象となる可能性があります。
- テスト範囲の遵守: ペネトレーションテストなどの業務で利用する場合は、契約で定められたテスト範囲やルールを厳守してください。
2. ターゲットサーバーへの負荷
- スレッド数 (
-t
) の調整: デフォルトのスレッド数 (40) でも、ターゲットサーバーによっては大きな負荷となる可能性があります。特に共有サーバーや性能の低いサーバーに対しては、スレッド数を低めに設定 (例:-t 10
) するか、-p
(遅延) や-rate
(リクエストレート制限) オプションを使用して、サーバーへの影響を最小限に抑えるように配慮してください。過度な負荷はサービス停止を引き起こしたり、テスト行為自体が検知・ブロックされる原因となります。 - テスト時間帯の考慮: 可能であれば、サービスの利用者が少ない時間帯にテストを実施することも検討しましょう。
3. フィルタリングの重要性
- ノイズの削減: 大規模なワードリストを使用したり、汎用的なエラーページが存在したりする場合、大量の不要な結果 (ノイズ) が出力されることがあります。
-fc
,-fs
,-fw
,-fl
,-fr
などのフィルタリングオプションや、-mc
,-ms
などのマッチングオプションを駆使して、本当に意味のある結果だけを抽出するようにしましょう。 - 自動キャリブレーション (
-ac
):-ac
オプションは、スキャン前にベースラインとなるリクエストを送信し、一般的な「Not Found」レスポンスなどを自動でフィルタリングしてくれる便利な機能です。
4. タイムアウト設定
-timeout
の調整: ネットワーク環境が不安定だったり、サーバーの応答が遅い場合は、デフォルトのタイムアウト値 (10秒) では短すぎる可能性があります。-timeout
オプションで適切な値を設定し、有効なリソースを見逃さないようにしましょう。
5. 再帰スキャン (-recursion) の注意
- 無限ループのリスク: 設定によっては、再帰スキャンが意図せず深い階層まで進み、大量のリクエストを送信し続けてしまう可能性があります。
-recursion-depth
で探索の深さを制限することを強く推奨します。 - 負荷の増大: 再帰スキャンは発見されたディレクトリごとに新たなスキャンジョブを開始するため、総リクエスト数が指数関数的に増加する可能性があります。サーバー負荷に十分注意してください。
6. ワードリストの選択
- 目的に合ったリストを: 前述の通り、ターゲットや目的に合ったワードリストを選択することが重要です。やみくもに巨大なリストを使うのではなく、効率的なリスト選択を心がけましょう。
7. 結果の保存と確認
-o
で結果を保存: 長時間かかるスキャンや大量の結果が予想される場合は、-o
オプションで結果をファイルに保存しましょう。後でゆっくり分析することができます。JSON (-of json
) や HTML (-of html
) 形式が便利です。- 手動での確認: ffufが発見したパスやファイルが実際にアクセス可能か、どのようなコンテンツが含まれているかは、最終的に手動でブラウザや
curl
などを使って確認する必要があります。ステータスコードだけでは判断できない場合もあります。
まとめ ✨
ffufは、Go言語による高速性と、URL、ヘッダー、POSTデータなどリクエストの様々な箇所をファジングできる柔軟性を兼ね備えた、非常に強力なWebファジングツールです。基本的なディレクトリ/ファイル探索から、サブドメイン列挙、パラメータファジング、再帰スキャンまで、幅広い用途に対応します。
効果的な利用のためには、以下の点が重要です。
FUZZ
キーワードを使ったターゲット指定の理解- 目的に合わせた適切なワードリストの選択
- 豊富なマッチング/フィルタリングオプションの活用によるノイズ除去
- スレッド数や時間制御オプションによるサーバー負荷への配慮
- 法的・倫理的な側面の遵守と責任ある利用
この記事で紹介した使い方やオプションはffufの機能の一部に過ぎません。ぜひ実際にツールを触りながら、ffuf -h
でヘルプを確認したり、公式ドキュメント (GitHubリポジトリ) を参照したりして、その多様な機能を試してみてください。
ffufをマスターすることで、Webアプリケーションのセキュリティ評価や脆弱性診断の効率と精度を大きく向上させることができるでしょう。💪
コメント