root@thehacksparrow:~/writeups$ SYSTEM ONLINE
root@sparrow:~/writeups$ cat ffuf.md
// web

ffuf

21 Jul 2026 · 7 min read
FFUF (Fuzz Faster U Fool) is a web fuzzer written in Go, designed to fire thousands of requests per second by replacing the FUZZ keyword with each entry of a wordlist. It is used to discover directories, files, subdomains, parameters and hidden values in an application. Its strength lies in the fact that FUZZ can go anywhere in the request: URL, headers, cookies or POST body.

The key to ffuf is not the discoveries themselves, but knowing how to filter out the noise: a server that responds 200 to everything, or with fixed-size error pages, generates hundreds of false positives. That is why mastering -mc, -fc, -fs, -fw and above all auto-calibration -ac makes the difference between a useless list and real findings. Speed comes for free; a clean signal is what you have to work for.

1. Beginner level — path fuzzing and filters

FFUF cheat sheet — Beginner
CommandWhat it does
ffuf -u <t>/FUZZ -w <wl>Basic directory fuzzing
ffuf -u <t>/FUZZ -w <wl> -mc 200Matches only 200 responses
ffuf -u <t>/FUZZ -w <wl> -fc 404Excludes status code 404
ffuf -u <t>/FUZZ -w <wl> -e .php,.txtAdds extensions to try
ffuf -u <t>/FUZZ -w <wl> -o out.jsonSaves results to a file
ffuf -u <t>/FUZZ -w <wl> -t 40Adjusts the number of threads
ffuf -u <t>/FUZZ -w <wl> -fs 0Excludes responses of size 0
ffuf -u <t>/FUZZ -w <wl> -recursionRecursive fuzzing into subdirectories
ffuf -u <t>/FUZZ -w <wl> -cColored output
ffuf -u https://FUZZ.dom.com -w <wl>Enumerates subdomains
ffuf -u <t>/FUZZ -w <wl> -vVerbose mode
ffuf -u <t>/FUZZ -w <wl> -sSilent mode
ffuf -u <t>/FUZZ -w <wl> -of jsonSets the output format
ffuf -u <t>/FUZZ -w <wl> -p 0.1Adds a pause between requests

2. Advanced level — POST, multi-wordlist and calibration

FFUF cheat sheet — Advanced
CommandWhat it does
ffuf -u <t> -w <wl> -X POST -d "u=FUZZ"Fuzzing in the POST body
ffuf -u <t>/FUZZ -w <wl> -H "Cookie:x=FUZZ"Fuzzing in headers or cookies
ffuf -u <t>/FUZZ -w w1:FUZ1,w2:FUZ2Fuzzing with multiple wordlists
ffuf -u <t>/FUZZ -w <wl> -fw 5Excludes responses by number of words
ffuf -u <t>/FUZZ -w <wl> -fr "error"Excludes responses by regex
ffuf ... -mode clusterbombCombines several wordlists with each other
ffuf -u <t>/FUZZ -w <wl> -rate 100Limits requests per second
ffuf ... -replay-proxy <burp>Replays hits to Burp Suite
ffuf -u <t>/FUZZ -w <wl> -acAuto-calibrates false positives
ffuf -u <t>/FUZZ -w <wl> -config <f>Loads configuration from a file
ffuf ... -recursion-depth 2Limits the recursion depth
ffuf -u <t>/FUZZ -w <wl> -timeout 5Adjusts the timeout per request
ffuf -u <t>/FUZZ -w <wl> -saStops the scan on too many errors
ffuf -u <t>/FUZZ -w <wl> -seStops only that job, not all of ffuf

3. Details people miss

  • The FUZZ keyword is just a convention: you can rename it (e.g. FUZ1, FUZ2) and place it in the URL, in a header with -H, in a cookie or in the body with -d; ffuf substitutes wherever it appears.
  • Without filters you will see a lot of noise. Start by sending one request to check the size/words of a typical 404 response and filter with -fs or -fw; auto-calibration -ac automates exactly that by sending random inputs at the start.
  • Filters (-fc, -fs, -fw) and matchers (-mc) are not the same: matchers define what is accepted and filters what is discarded; if you combine both, the filter is applied on top of what has already been accepted.
  • For subdomain fuzzing (FUZZ.domain.com) remember you depend on the server using virtual hosts; often you will need to fuzz the Host header with -H instead of the URL.
  • Raise the threads with -t sensibly: too much concurrency against a fragile target triggers errors and false negatives; combine -rate, -timeout and -p to avoid taking down the service or getting banned.

Responsible use

These commands are for systems you own or have explicit written authorisation to test (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.