ffuf
Fast web fuzzer written in Go. Excellent for directories, files, parameters, vhosts.
Install:
go install github.com/ffuf/ffuf/v2@latestWordlist 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/FUZZDirectory 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,302File 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)
-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)
-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 httpfor brute force attacks. It will not find the password. You MUST build the request manually with-u,-d, and-Hflags.
-ac(auto-calibrate) is OK for brute force — it filters by response differences.-acis NOT OK for vhost enumeration — use-fswith 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