go get github.com/ffuf/ffuf
go get -u github.com/ffuf/ffuf
~/go/bin/ffuf
ffuf -u https://example.com/FUZZ/ -w ./wordlist
ffuf -u https://example.com/FUZZ -w ./wordlist -recursion -recursion-depth 1
ffuf -u https://example.com/FUZZ -w ./wordlist -e .bak
ffuf -u https://example.com/W1 -w ./wordlist:W1 -e .bak
This method does not include recursion
ffuf -u https://example.com/FUZZ -w ./wordlist -s | tee ./outfile.txt
ffuf -u https://example.com/FUZZ -w ./wordlist -of html -o ./report
ffuf -u https://example.com/FUZZ -w ./wordlist -b "NAME1=VALUE1; NAME2=VALUE2"
ffuf -u https://example.com/FUZZ -w ./wordlist -H "NAME1=VALUE1; NAME2=VALUE2"
ffuf -u https://W2.com/W1 -w ./wordlist:W1 -w ./domains:W2
ffuf -request /tmp/request -w ./wordlist
The request file should contain the FUZZ keyword!
Default mode in ffuf is cluster bomb
ffuf -request -w ./users:W1 ./passwords:W2 -mode pitchfork
ffuf -request -w ./wordlist -rate 100
Removes the req/res which match the filter. Use this if you know what you want to remove.
ffuf -request -w ./wordlist -fr "not found"
Keeps the req/res which match the matcher. Use this if you know what you want to keep.
ffuf -request -w ./wordlist -mc 201
ffuf -u https://example.com/login -w ./wordlist.txt -X "POST" -d "[email protected]&password=FUZZ"
ffuf -u https://example.com/update -w ./wordlist.txt -X "PUT" -d "FUZZ=massassignment"
ffuf -u https://example.com/update -w ./wordlist.txt -X "PUT" -H "Content-Type: application/json" -d "{'FUZZ': 'test'}"
ffuf -request -w ./wordlist -replay-proxy http://127.0.0.1:8080
- Stop on spurious requests
- Request throttling and delay
- Automatically calibrate filters
- Custom automatic calibration filtering