Welcome to the ultimate guide on fuzzing using FFUF! Whether youβre just starting out or looking to sharpen your skills, this guide will walk you through everything you need to know about fuzzing and mastering FFUF. Letβs dive in! π
Fuzzing is an automated technique used to discover vulnerabilities, bugs, and edge cases in software or web applications. It works by feeding random or unexpected data into inputs to see how the application responds. This process can uncover security flaws and other issues that manual testing might miss.
Some of the most popular fuzzing tools include:
FFUF (Fuzz Faster U Fool) is a fast web fuzzer written in Go. Itβs designed to find hidden files, directories, parameters, and vulnerabilities in web applications.
Here are some must-know resources to boost your fuzzing skills:
FFUF comes with a variety of options to customize your fuzzing experience. Hereβs a quick reference guide:
Command/Option | Description |
---|---|
-u |
URL of the target, with FUZZ keyword marking where fuzzing occurs. |
-w |
Wordlist for fuzzing. Can specify multiple wordlists with commas or multiple -w options. |
-X |
Specify the HTTP method (GET, POST, PUT, DELETE, etc.). |
-d |
POST data to be sent in requests (for POST requests). |
-H |
Add custom headers to the request. Multiple headers can be added by using multiple -H options. |
-t |
Number of concurrent threads (concurrent requests). |
-r |
Automatically follow redirects. |
-x |
Proxy support: send requests through a specified proxy (e.g., Burp Suite). |
-fs |
Filter responses by size (exclude specific sizes). |
-fc |
Filter responses by HTTP status codes (exclude specific status codes). |
-mc |
Match specific HTTP status codes (only include specific status codes). |
-s |
Silent mode (minimal output). |
-o |
Output results to a file. |
-of |
Output file format (json , html , csv , md ). |
-recursion |
Enables recursive fuzzing (fuzz deeper into the discovered directories). |
-recursion-depth |
Set recursion depth. Defines how many levels deep to recurse during fuzzing. |
-e |
Extensions to append to the fuzzing wordlist (e.g., .php , .txt , .html ). |
-ac |
Auto-calibration mode: automatically reduces noise by calibrating against baseline responses. |
-rate |
Set the number of requests per second (to avoid rate limiting). |
-timeout |
Set a timeout value (in seconds) for each request. |
-input-cmd |
Use an external command to provide input for fuzzing (stdin). |
-input-num |
Number of entries to process from the input. |
-input-shell |
Use a shell command as the input generator for fuzzing. |
-v |
Verbose mode: show additional information during execution. |
-p |
Delay in seconds between each request to avoid rate limiting or detection. |
-replay-proxy |
Proxy through which to replay requests that triggered interesting results. |
-ignore-body |
Ignore the response body in the results output. |
-noninteractive |
Disable the interactive progress bar and use a cleaner output format (for scripts). |
-debug-log |
Write a debug log to a specified file for troubleshooting. |
-auth |
Use HTTP Basic Authentication (format: username:password). |
Discover hidden directories:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist/directory-list.txt
Fuzz a POST requestβs username
field:
ffuf -u https://target.com/login -X POST -d 'username=FUZZ&password=password' -w /path/to/wordlist.txt
Test with custom headers:
ffuf -u https://target.com/admin -H "Authorization: Bearer FUZZ" -w /path/to/wordlist.txt
Try fuzzing for different file extensions:
ffuf -u https://target.com/indexFUZZ -w /path/to/wordlist.txt -e .php,.html,.txt
Filter out 404 responses and small response sizes:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -fc 404 -fs 100
Send fuzzing traffic through Burp Suite:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -x http://127.0.0.1:8080
-u
(URL)Description: The target URL where you want to fuzz. The keyword FUZZ
in the URL tells FFUF where to insert the fuzzed data.
Example:
ffuf
-u https://target.com/FUZZ -w /path/to/wordlist.txt
-w
(Wordlist)Description: The path to the wordlist you want to use for fuzzing. You can provide multiple wordlists by separating them with commas or using multiple -w
flags.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist1.txt,/path/to/wordlist2.txt
-X
(HTTP Method)Description: Specifies the HTTP method to use (GET, POST, PUT, DELETE, etc.).
Example:
ffuf -u https://target.com/login -X POST -d 'username=FUZZ&password=password' -w /path/to/wordlist.txt
-d
(POST Data)Description: Data to send in the body of the request. This is typically used in POST requests.
Example:
ffuf -u https://target.com/login -X POST -d 'username=FUZZ&password=pass123' -w /path/to/wordlist.txt
-H
(Custom Headers)Description: Add custom headers to the request. You can add multiple headers by repeating the -H
option.
Example:
ffuf -u https://target.com/admin -H "Authorization: Bearer FUZZ" -w /path/to/wordlist.txt
-t
(Number of Threads)Description: Specifies the number of concurrent requests (threads). More threads = faster fuzzing, but it may increase the chance of detection or getting blocked.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -t 50
-r
(Follow Redirects)Description: Automatically follows redirects when fuzzing.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -r
-x
(Proxy)Description: Use a proxy to send requests through (e.g., Burp Suite or ZAP).
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -x http://127.0.0.1:8080
-fs
(Filter by Size)Description: Exclude responses that match the specified size in bytes.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -fs 100
-fc
(Filter by Status Code)Description: Exclude responses that return specific HTTP status codes.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -fc 404
-mc
(Match by Status Code)Description: Only include responses that return specific HTTP status codes.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -mc 200
-s
(Silent Mode)Description: Minimizes the output to only show results, useful when fuzzing in a non-interactive mode or scripting.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -s
-o
and -of
(Output and Format)Description: Save the fuzzing results to a file. You can specify the format with -of
, including JSON, CSV, HTML, and Markdown (md).
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -o results.json -of json
-recursion
and -recursion-depth
Description: Enables recursive fuzzing (FFUF will automatically fuzz directories found) and sets the recursion depth.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -recursion -recursion-depth 2
-e
(File Extensions)Description: Append extensions to the fuzzed wordlist (e.g., .php
, .html
, .txt
).
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -e .php,.txt
-ac
(Auto-Calibration)Description: Automatically adjusts based on baseline responses to reduce noise and false positives.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -ac
-rate
(Rate Limiting)Description: Set the number of requests per second to avoid getting blocked by rate-limiting mechanisms.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -rate 100
-timeout
(Request Timeout)Description: Set a timeout (in seconds) for each request.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -timeout 5
-input-cmd
(Input via Command)Description: Use an external command to generate input for fuzzing, e.g., from stdin
.
Example:
ffuf -u https://target.com/FUZZ -input-cmd "cat wordlist.txt"
-v
(Verbose Mode)Description: Enables verbose mode, showing additional information about the fuzzing process.
Example:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -v
Use FFUF to fuzz deeper directories:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -recursion -recursion-depth 2
Test API endpoints with fuzzing:
ffuf -u https://api.target.com/users/1/FUZZ -w /path/to/wordlist.txt
Use FFUF to fuzz for SQL injection vulnerabilities:
ffuf -u https://target.com/login -X POST -d 'username=FUZZ' -w /path/to/sqli_payloads.txt
Proxy FFUF traffic through Burp for deeper analysis:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -x http://127.0.0.1:8080
Use masscan or nmap to find open ports and then fuzz with FFUF.
You can export the FFUF results in different formats, such as JSON or CSV.
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -o output.json -of json
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -H "Authorization: Bearer your_token"
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -H "Authorization: Basic dXNlcjpwYXNz"
Limit the request rate to avoid getting blocked:
ffuf -u https://target.com/FUZZ -w /path/to/wordlist.txt -rate 50
Change the User-Agent header with each request:
ffuf -u https://target.com/FUZZ -H "User-Agent: FUZZ" -w /path/to/user-agents.txt
If you encounter SSL certificate errors, try adding:
-k
Increase the timeout if FFUF is too fast for the server:
-Timeout 5
masscan
or nmap
to discover open ports and services.vulnerabilities like SQLi, XSS, and more.
-t
) to match server speed.-ac
to reduce false positives.Fuzzing is an essential skill for finding hidden vulnerabilities in web applications. FFUF is an incredibly powerful tool to assist you in this task. Armed with the right wordlists and the examples from this guide, youβre ready to explore and secure web applications more effectively!
Happy fuzzing! ππ