On this page 15 sections
What is FFUF?
FFUF is a web fuzzing tool that replaces the FUZZ keyword with values from a wordlist. By placing FUZZ in different parts of a request, it can be used to discover hidden directories, files, extensions, subdomains, virtual hosts, parameters and parameter values.
ffuf -hDirectory fuzzing
Place FUZZ directly in the URL path to test directory or file names from a wordlist. Each word replaces FUZZ and FFUF sends a request for the resulting path.
ffuf -w wordlist.txt:FUZZ -u https://sam0x.me/FUZZExtension fuzzing
FUZZ can be placed after a filename to discover valid file extensions. This is useful when the filename is known but its extension is not.
ffuf -w wordlist.txt:FUZZ -u https://sam0x.me/indexFUZZPage fuzzing
When the application technology or extension is already known, FUZZ can be placed in the filename while keeping the extension fixed.
ffuf -w wordlist.txt:FUZZ -u https://sam0x.me/blog/FUZZ.phpRecursive fuzzing
FFUF can recursively continue fuzzing inside discovered directories. The recursion depth controls how many directory levels are explored, while -e adds extensions to test.
ffuf -w wordlist.txt:FUZZ -u https://sam0x.me/FUZZ -recursion -recursion-depth 1 -e .php -vSubdomain fuzzing
FUZZ can be inserted into the hostname to test possible subdomain names from a DNS wordlist.
ffuf -w wordlist.txt:FUZZ -u https://FUZZ.sam0x.me/Virtual host fuzzing
Virtual hosts can share the same IP address while responding differently depending on the HTTP Host header. Instead of changing the destination URL, FUZZ is inserted into the Host header.
ffuf -w wordlist.txt:FUZZ -u https://sam0x.me/ -H 'Host: FUZZ.sam0x.me' -fs xxxFiltering responses
Fuzzing can generate many responses that look identical. The -fs option filters responses by their size, making it easier to remove known false positives. Replace xxx with the response size that should be ignored.
ffuf -w wordlist.txt:FUZZ -u https://sam0x.me/FUZZ -fs xxxGET parameter fuzzing
FUZZ can replace a parameter name in the query string. This allows testing a list of possible parameter names against an endpoint.
ffuf -w wordlist.txt:FUZZ -u https://admin.sam0x.me/admin/admin.php?FUZZ=key -fs xxxPOST parameter fuzzing
POST parameters can be fuzzed by placing FUZZ inside the request body. The request method is defined with -X POST and the form content type is supplied through the HTTP header.
ffuf -w wordlist.txt:FUZZ -u https://admin.sam0x.me/admin/admin.php -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxxParameter value fuzzing
Once a parameter name is known, FUZZ can be placed in its value instead. The wordlist then provides the candidate values that FFUF sends to the application.
ffuf -w ids.txt:FUZZ -u https://admin.sam0x.me/admin/admin.php -X POST -d 'id=FUZZ' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxxUseful SecLists wordlists
Different fuzzing targets benefit from different wordlists. The cheat sheet uses SecLists collections for directories, extensions, subdomains and parameter names.
/opt/useful/seclists/Discovery/Web-Content/directory-list-2.3-small.txt/opt/useful/seclists/Discovery/Web-Content/web-extensions.txt/opt/useful/seclists/Discovery/DNS/subdomains-top1million-5000.txt/opt/useful/seclists/Discovery/Web-Content/burp-parameter-names.txtCreate a numeric wordlist
A simple numeric sequence can be generated when an application uses predictable numerical values such as IDs.
for i in $(seq 1 1000); do echo $i >> ids.txt; doneLocal DNS entry
When a lab hostname does not exist in public DNS, it can be mapped manually to a target IP through /etc/hosts.
sudo sh -c 'echo "SERVER_IP target1.sam0x.me" >> /etc/hosts'Validate requests with curl
Before fuzzing a POST request, curl can be used to reproduce and verify the request manually. This helps confirm the endpoint, parameter name, request body and content type.
curl https://admin.sam0x.me/admin/admin.php -X POST -d 'id=key' -H 'Content-Type: application/x-www-form-urlencoded'