githubEdit

ffuf

Fast web fuzzer written in Go. Excellent for directories, files, parameters, vhosts.

Install:

go install github.com/ffuf/ffuf/v2@latest

Wordlist and keyword

Assign a wordlist to a keyword with -w PATH:KEYWORD. Default keyword is FUZZ; use :FUZZ explicitly for clarity.

ffuf -w /path/to/wordlist.txt:FUZZ -u http://TARGET/FUZZ

Directory Fuzzing

ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ \
  -u http://TARGET/FUZZ

# With status code filtering
ffuf -w wordlist.txt:FUZZ -u http://TARGET/FUZZ -mc 200,301,302

File Fuzzing


Recursive Fuzzing

URL must end with FUZZ for recursion. Automatically fuzz discovered directories:


Parameter Fuzzing

POST form data needs -H "Content-Type: application/x-www-form-urlencoded". JSON body needs -H "Content-Type: application/json".

GET Parameters

POST Parameters

JSON Body


VHost / Subdomain Fuzzing

VHost = same IP, fuzz Host header; filter by default response size (-fs) to see only different vhosts.


Filtering Output

Match Filters (include results)

Flag
Description

-mc

Match status codes (default: 200,204,301,302,307,401,403,405,500)

-ms

Match response size

-mw

Match word count

-ml

Match line count

-mt

Match response time (e.g., >500 for > 500ms)

Filter Filters (exclude results)

Flag
Description

-fc

Filter (exclude) status codes

-fs

Filter response size

-fw

Filter word count

-fl

Filter line count

-fr

Filter by regex

Examples


Multiple Wordlists

Use different keywords for multiple positions:


Request from file (Burp / raw HTTP)

Use a saved HTTP request so headers and body match exactly (e.g. for API user enum, JSON POST):

Save the request from Burp (e.g. Paste from file) with FUZZ where the payload goes.


Authentication


Performance Options


Output


Proxy


HTTP Brute Force (Login Forms)

WARNING: Do NOT use ffuf -request login.req -request-proto http for brute force attacks. It will not find the password. You MUST build the request manually with -u, -d, and -H flags.

-ac (auto-calibrate) is OK for brute force — it filters by response differences. -ac is NOT OK for vhost enumeration — use -fs with the default response size instead.

Manual Build (Correct Way)

Full Example

Prefer ffuf over hydra for HTTP brute force — it is faster and more flexible.


SQLi Discovery with ffuf

Save a Burp request with FUZZ replacing the injection point, then fuzz with a SQLi wordlist:

Filter by response size (-fs) to remove baseline responses. Look for responses with different sizes indicating SQL errors or successful injection.


Password Wordlists


Common Wordlists


Quick Reference Commands

Last updated