Webアプリケーションに特化したファジングツール
- ffuf -
Webアプリケーションのセキュリティ診断に欠かせないツールの一つが、ffuf(Fuzz Faster U Fool)です。
本記事では、「ffufとは何か」から「インストール方法」「基本的な使い方」「実際の使用例」まで、画像や具体的なコマンドを交えて分かりやすく解説します。
ffufとは
ffuf(Fuzz Faster U Fool)は、WebアプリケーションやWebサーバーに対して効率的にファジングを行うためのオープンソースツールです。
ファジングとは、特定の入力値やリクエストを自動的かつ大量に送信し、その応答から予期せぬ挙動や隠されたリソースを発見するテスト手法を指します。ffufはファジングを効率的に実現するために設計されており、セキュリティ診断やペネトレーションテストの現場で広く利用されています。
ffufはGo言語で開発されており、高速かつ軽量であることが特徴です。主にディレクトリ探索やパラメータ検証など、Webサーバーに対して効率的にリクエストを送り、潜在的なリソースや脆弱なエンドポイントを発見する目的で利用されます。
主な特徴
脆弱性診断やペネトレーションテストに最適
ffufは、ディレクトリやファイルの隠れリソース探索、パラメータの列挙、さらにはバーチャルホストの検出など、セキュリティ診断の最初に行う情報収集フェーズを高速かつ網羅的に実施できます。
- ディレクトリブルートフォース
- ファイル探索
- 仮想ホスト(vhost)検出
- HTTPリクエストヘッダーのファジング
- GET/POSTパラメータのファジング 他
OWASP Top 10でも「A01:2021-アクセス制御の不備」や「A05:2021-セキュリティの設定ミス」は頻出のカテゴリであり、ffufはそれらの脆弱性の早期発見に有用です。
コマンドライン・インタフェース
ffufは、「Dirbuster」や「OWASP ZAP」と異なり、コマンドライン・インタフェース(CLI)のセキュリティ診断ツールです。ターゲットURLやワードリスト、スレッド数、出力形式、フィルタ条件などをすべてコマンド一行で定義でき、シェルスクリプトに保存して再利用すれば再現性の高いテストを継続的に実施できます。
BashやPythonなどのスクリプトに組み込みやすく、セキュリティチェックをCI/CDパイプラインに統合することもできます。
ワードリストの柔軟性
Kali Linuxに標準搭載されているWordListsはもちろん、SecListsをはじめとした既存の辞書ファイルが利用でき、ディレクトリ探索、パラメータ列挙など、対象に応じたワードリストを切り替えることで効率的にセキュリティ診断を進められます。
さらに、独自に作成したカスタムリストを使用することもできます。実際の現場では、対象となるアプリケーションの命名規則や業界固有のキーワードが存在する場合が多く、汎用的なワードリストだけでは検知できないリソースが潜んでいる可能性があります。
例えば、金融業界向けのアプリケーションでは「account」「transaction」といった語が頻出しますが、医療系システムでは「patient」「record」といった異なる傾向が見られます。こうした特性を反映させたカスタムワードリストは、検出精度を飛躍的に高めます。
このように、ffufは標準的なワードリストに留まらず、診断対象に応じて柔軟にワードリストを活用できる点で、セキュリティエンジニアにとって強力な武器となります。
多様なフィルタリング機能
ffufは、単純なHTTPステータスコードの比較に加え、レスポンスのサイズやワード数、行数を基準としたフィルタリング機能も備えています。
例えば、ディレクトリ探索を行う際、何千件もの404 Not Found
が混じる中で、わずか数件の200 OK
を探すことになります。その際、-fc 404
オプションで404 Not Found
を除外すれば、重要な発見だけを抽出できます。
またWebサーバーによっては、存在しないページにアクセスした際にカスタムエラーページを表示しながらも、HTTPステータスコード200 OK
を返す場合があります。このような場合、レスポンスサイズやワード数、文字列で除外することで、不要な結果を一掃できます。
MITライセンス
ffufはMITライセンスの下で提供されているオープンソースソフトウェアです。
MITライセンスはオープンソースライセンスの中でも寛容で、広く利用されているライセンス形態の一つです。
商用利用も制限されていないため、脆弱性診断やペネトレーションテストのツールとして、誰でも無料で利用することができます。
ffufの使い方
インストール・起動方法
Kali Linuxの場合
ffufは、Kali Linuxにプリインストールされているため、アプリケーションメニューから起動することができます。
本記事で使用したKali Linuxのバージョン
$ cat /etc/os-release
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
VERSION_ID="2025.3"
VERSION="2025.3"
VERSION_CODENAME=kali-rolling
〜 以下、省略 〜
Kali Linuxのアプリケーションメニュー01-Reconnaissance
-Web Scanning
からffuf
を選択します。

すぐにターミナルが起動し、ヘルプ(ffuf -h
)の実行結果が表示されます。

ffufはコマンドライン・インタフェースのため、ターミナルから直接起動することもできます。
$ ffuf -h
Fuzz Faster U Fool - v2.1.0-dev
HTTP OPTIONS:
-H Header `"Name: Value"`, separated by colon. Multiple -H flags are accepted.
-X HTTP method to use
〜 以下、省略 〜
Ubuntuの場合
日本でもデスクトップ環境での利用が多いUbuntuですが、ffufはプリインストールされていません。しかし、公式リポジトリに含まれているため、apt
コマンドで簡単にインストールすることができます。
本記事で使用したUbuntuのバージョン
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
〜 以下、省略 〜
公式リポジトリを確認
$ sudo apt update
$ sudo apt info ffuf
Package: ffuf
Version: 2.1.0-1ubuntu0.24.04.3
Built-Using: golang-1.22 (= 1.22.2-2ubuntu0.4), golang-github-adrg-xdg (= 0.4.0-2), golang-github-andybalholm-brotli (= 1.0.5-1), golang-github-andybalholm-cascadia (= 1.3.2-1), golang-github-ffuf-pencode (= 0.4-1ubuntu0.24.04.3), golang-github-pelletier-go-toml (= 1.9.5-1ubuntu0.24.04.3), golang-github-puerkitobio-goquery (= 1.8.1-2), golang-golang-x-net (= 1:0.21.0+dfsg-1)
Priority: optional
Section: universe/devel
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Thiago Andrade Marques <andrade@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 8,418 kB
Depends: libc6 (>= 2.34)
Homepage: https://github.com/ffuf/ffuf
Download-Size: 2,994 kB
APT-Sources: http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages
Description: Fast web fuzzer written in Go (program)
ffuf is a fast web fuzzer written in Go that allows typical directory
discovery, virtual host discovery (without DNS records) and GET and POST
parameter fuzzing.
.
This program is useful for pentesters, ethical hackers and forensics experts.
It also can be used for security tests.
N: 追加レコードが 1 件あります。表示するには '-a' スイッチを付けてください。
ffufをインストール
$ sudo apt install ffuf
インストール後にパスとバージョンを確認
$ which ffuf
/usr/bin/ffuf
$ ffuf -V
ffuf version: 2.1.0-dev
ffufを起動する
$ ffuf -h
Fuzz Faster U Fool - v2.1.0-dev
HTTP OPTIONS:
-H Header `"Name: Value"`, separated by colon. Multiple -H flags are accepted.
-X HTTP method to use
〜 以下、省略 〜
Ubuntuの場合、アプリケーションアイコンは作成されないので、端末(ターミナル)からコマンド実行します。
基本的な使い方
最も基本的な構文
$ ffuf -w <ワードリスト> -u <ターゲットURL>
-w
:ワードリストのパス-u
:テスト対象のURL
ffufの基本的な使用方法は、診断対象となるURLに対してワードリストを適用し、指定したパラメータ部分を順に置き換えながらリクエストを実行し、その応答結果を解析します。
最も単純なケースでは、ディレクトリやファイルの存在を調査するために使用します。URL中にFUZZ
というプレースホルダーを記述すると、ワードリストの値に置き換えられ、Webサーバーへ順次リクエストが送信されます。
ディレクトリ探索の実行例
$ ffuf -w wordlist.txt -u http://example.com/FUZZ
例えば、http://example.com/FUZZ
と指定すると、ワードリストに含まれる文字列ごとにhttp://example.com/admin
やhttp://example.com/login
などが自動的にリクエストされます。その結果、HTTPステータスコードやレスポンスサイズなどから、存在するディレクトリやリソースを特定することができます。
よく使うオプション一覧
- 基本オプション
-u
:テスト対象のURLを指定-w
:ワードリストを指定-V
:バージョン情報を表示-h
:ヘルプを表示
- 出力系
-o
:出力ファイル名を指定-of
:出力フォーマットを指定(json、ejson、html、md、csv、ecsv、all)※デフォルト:json-c
:カラーで出力(デフォルト:false)-v
:詳細を出力(デフォルト:false)
- マッチング
-mc
:HTTPステータスコードで抽出(デフォルト:200,204,301,302,307,401,403)-ms
:レスポンスサイズで抽出-mw
:ワード数で抽出
- フィルタリング
-fc
:特定のHTTPステータスコードを除外-fs
:レスポンスサイズで除外-fw
:ワード数で除外
- パフォーマンス
-t
:同時スレッド数を指定(デフォルト:40スレッド)-rate
:1秒あたりのリクエスト数(デフォルト:0)-timeout
:リクエストのタイムアウト秒数(デフォルト:10秒)
- 高度な利用オプション
-X
:HTTPメソッドを指定(デフォルト:GETメソッド)-H
:HTTP ヘッダを指定-d
:POSTデータを指定
具体的な使用例
ディレクトリ・ファイル探索
$ ffuf -w wordlist.txt -u http://example.com/FUZZ
-w
:使用するワードリストのパスを指定-u
:テスト対象のURLを指定(FUZZ
部分がワードリストに含まれる文字列に置換されます。)
Webサーバー上に存在する隠れたディレクトリや管理用ファイルを探索する方法です。ffufは、高速かつ柔軟にディレクトリやファイルのブルートフォース探索を行えるため、ペネトレーションテストの初期段階でよく利用されます。
パラメータ探索
$ ffuf -w params.txt -u http://example.com/index.php?FUZZ=test
Webアプリケーションに対する攻撃経路の一つに「隠れたパラメータ」の存在があります。例えば、開発やテスト用に残されたパラメータ、あるいは公開されていない機能を有効化するためのパラメータがその代表例です。
上記コマンドでは、FUZZ
というプレースホルダーにワードリストの各単語が順に差し込まれ、実在するパラメータ名を探索します。例えば、user=test
や debug=test
といったリクエストが自動で生成され、レスポンスが比較されます。
複数のキーワードを指定する
$ ffuf -w filenames.txt:FILENAME -w extensions.txt:EXTENSION -u http://example.com/FILENAME.EXTENSION
ffufは、単一のキーワードだけでなく、複数のキーワードを組み合わせた探索にも対応しています。例えば、典型的なシナリオとして「ファイル名」と「拡張子」を別々に総当たりするケースが挙げられます。
上記のコマンドでは、filenames.txt
のファイル名候補とextensions.txt
の拡張子候補を組み合わせてリクエストを生成し、存在するリソースを探索します。
マッチング
$ ffuf -w wordlist.txt -u http://example.com/FUZZ -mc 200
-mc
:抽出するHTTPステータスコードを指定
単純にレスポンスを列挙するだけでは、膨大な結果から有用な情報を見つけ出すのは困難です。そのため、HTTPレスポンスの特定条件に基づいて結果を絞り込む機能が欠かせません。
ffufでは-mc
オプションを用いることで、HTTPステータスコードを指定して抽出が可能です。
例えば、ディレクトリブルートフォースの際に「200番だけを確認したい」場合、-mc 200
を指定すれば、200 OK
のみを出力します。また、複数のHTTPステータスコードをカンマ区切りで指定できるため、-mc 200,301,302
のように典型的な成功レスポンスを指定することもできます。
さらに、コンテンツのサイズを基準にマッチングする-ms
や、レスポンス中のワード数に基づく-mw
といったオプションも利用でき、目的に応じて柔軟に組み合わせることができます。
フィルタリング
$ ffuf -w wordlist.txt -u http://example.com/FUZZ -fc 301,302
フィルタリングはマッチングと対を成す機能で、条件に合致するレスポンスを除外するために用います。例えば、-fc
オプションでHTTPステータスコードを指定すれば、不要なレスポンスを削除することができます。
実際の診断では、対象のWebサーバーがカスタムエラーページを返す場合など、レスポンスコードだけでは判別がつかないケースもあるため、レスポンスサイズやワード数のフィルタリングを併用すると効率的です。
-fc
:特定のHTTPステータスコードを除外-fs
:レスポンスサイズで除外-fw
:レスポンス内のワード数で除外
ファイル出力
$ ffuf -w wordlist.txt -u http://example.com/FUZZ -o result.csv -of csv
-o
:出力ファイル名-of
:出力ファイルのフォーマット形式
出力形式はHTML、CSV、JSONといった複数の形式をサポートしており、用途に応じて選択できます。
【実演】ローカル環境でffufを実行する
実際のシステムに対してセキュリティ診断を行うことは、法律に抵触する可能性があります。そのため、本記事ではやられアプリの一つであるDVWA(Damn Vulnerable Web Application)を用いて、ffufの挙動を確認します。
検証環境のシステム構成
ffuf実行マシン | ・Kali Linux 2025.3 ・192.168.10.11 ・ffuf version: 2.1.0-dev |
---|---|
ターゲットマシン | ・DVWA(Damn Vulnerable Web Application)Version 1.8 ・192.168.10.105 |
Kali Linux、DVWAは、Windows上で仮想マシンとして稼働しています。環境構築は、下記の記事をご覧ください。
ffufを使って、セキュリティ診断を実施
Kali LinuxのブラウザでDVWAにアクセス
http://192.168.10.105/dvwa/
にアクセスするとログイン画面が表示され、認証情報がわからなければ、先に進むことはできません。

ffufを実行
Kali LinuxからDVWAに対してffufを実行し、ディレクトリ・ファイル探索を行います。
$ ffuf -w /usr/share/wordlists/dirb/common.txt -u http://192.168.10.105/dvwa/FUZZ -mc 200,301
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://192.168.10.105/dvwa/FUZZ
:: Wordlist : FUZZ: /usr/share/wordlists/dirb/common.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,301
________________________________________________
.git/HEAD [Status: 200, Size: 23, Words: 2, Lines: 2, Duration: 14ms]
config [Status: 301, Size: 242, Words: 14, Lines: 8, Duration: 4ms]
docs [Status: 301, Size: 240, Words: 14, Lines: 8, Duration: 6ms]
external [Status: 301, Size: 244, Words: 14, Lines: 8, Duration: 5ms]
favicon.ico [Status: 200, Size: 1406, Words: 5, Lines: 2, Duration: 4ms]
login [Status: 200, Size: 1224, Words: 76, Lines: 66, Duration: 41ms]
php.ini [Status: 200, Size: 148, Words: 17, Lines: 5, Duration: 3ms]
robots [Status: 200, Size: 26, Words: 3, Lines: 2, Duration: 5ms]
robots.txt [Status: 200, Size: 26, Words: 3, Lines: 2, Duration: 6ms]
setup [Status: 200, Size: 3672, Words: 186, Lines: 81, Duration: 5ms]
:: Progress: [4614/4614] :: Job [1/1] :: 85 req/sec :: Duration: [0:00:04] :: Errors: 0 ::
発見したディレクトリやファイルを確認する
ffufを使って、ディレクトリ・ファイル探索を行うと、想定していないディレクトリやファイルが見つかることがあります。
http://192.168.10.105/dvwa/config

http://192.168.10.105/dvwa/php.ini

意図しないディレクトリやファイルが見つかった場合
誤って外部公開しているディレクトリやファイルは、サイバー攻撃の侵入経路となる恐れがあるため、直ちに公開範囲を再点検し、アクセス制御を強化して下さい。