| name | web-fuzzing-wfuzz |
| description | How to use WFuzz for web application fuzzing and brute force testing. Use this skill whenever the user mentions web fuzzing, brute forcing login forms, directory enumeration, parameter discovery, header testing, cookie brute forcing, HTTP method testing, or any web application security assessment that involves testing multiple values against a target. Make sure to use this skill for any web penetration testing task that requires systematic testing of inputs, even if the user doesn't explicitly mention "fuzzing" or "brute force." |
WFuzz Web Fuzzing Guide
WFuzz is a web application fuzzing tool that replaces the FUZZ keyword with payload values to systematically test web applications for vulnerabilities.
Core Concept
WFuzz replaces any reference to the FUZZ keyword with values from a payload list:
FUZZ = first payload position
FUZ2Z = second payload position
FUZ3Z = third payload position, etc.
Installation
pip install wfuzz
Basic Syntax
wfuzz [options] -w <wordlist> <url>
Filtering Options
Filter results to show only interesting responses:
By Response String
--hs "regex"
--ss "regex"
By HTTP Status Code
--hc CODE
--sc CODE
--sc 200,202
By Response Size
--hl NUM
--sl NUM
--hw NUM
--sw NUM
--hh NUM
--sh NUM
Output Options
wfuzz -e printers
-f /tmp/output,csv
Encoders
Transform payloads before sending:
wfuzz -e encoders
Available encoders: urlencode, md5, base64, hexlify, uri_hex, double urlencode
Usage:
-z file,/path/to/file,md5
-w /path/to/file,base64
-z list,value1,value2,hexlify
Common Attack Patterns
1. Login Form Brute Force
Single list (username only)
wfuzz -c -w users.txt --hs "Invalid username" \
-d "name=FUZZ&password=secret&autologin=1" \
http://target.com/login.php
Two lists (username + password)
wfuzz -c -z file,users.txt -z file,pass.txt --sc 200 \
-d "name=FUZZ&password=FUZ2Z&autologin=1" \
http://target.com/login.php
With cookies and proxy
wfuzz -c -w users.txt -w pass.txt --ss "Welcome" \
-p 127.0.0.1:8080:HTTP \
-b "PHPSESSIONID=abc123;custom=cookie" \
"http://target.com/login?user=FUZZ&pass=FUZ2Z"
2. Directory/Endpoint Discovery
wfuzz -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
--hc 404 \
http://target.com/FUZZ
wfuzz -c -w wordlist.txt --sc 200,202,204,301,302,307,403 \
http://target.com/uploads/FUZZ
3. API Parameter Discovery
wfuzz -c -w /usr/share/wordlists/SecLists/Discovery/Web-Content/param-minimal.txt \
--hc 404 \
https://target.com/api/FUZZ
wfuzz -c -w params.txt --hw 11 \
'http://target.com/path%3BFUZZ=FUZZ'
4. Header-Based Attacks
Basic Authentication
wfuzz -c -w users.txt -w pass.txt --ss "Welcome" \
-p 127.0.0.1:8080:HTTP \
--basic FUZZ:FUZ2Z \
http://target.com/admin
NTLM Authentication
wfuzz -c -w users.txt -w pass.txt --ss "Welcome" \
-p 127.0.0.1:8080:HTTP \
--ntlm 'domain\\FUZZ:FUZ2Z' \
http://target.com/admin
Cookie Brute Force
wfuzz -c -w users.txt --ss "Welcome" \
-p 127.0.0.1:8080:HTTP \
-H "Cookie: user=FUZZ" \
http://target.com/dashboard
User-Agent Testing
wfuzz -c -w user-agents.txt --hc 403 \
-p 127.0.0.1:8080:HTTP \
-H "User-Agent: FUZZ" \
http://target.com/
Virtual Host Discovery
wfuzz -c -w subdomains.txt --hc 400,404,403 \
-H "Host: FUZZ.target.com" \
-u http://target.com \
-t 100
5. HTTP Method Testing
wfuzz -c -w methods.txt --sc 200 -X FUZZ \
http://target.com/admin
wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ \
http://target.com/
Best Practices
- Always use
-c flag for colored output (easier to read)
- Filter aggressively - hide common responses (404, 403) to reduce noise
- Use appropriate wordlists - match the attack type to the wordlist
- Test with proxy - use Burp Suite or similar for traffic inspection
- Save results - use
-f to export findings for later analysis
- Rate limit - use
-t flag to control thread count and avoid detection
- Verify findings - fuzzing produces false positives; manually verify results
Common Wordlists
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-20000.txt
/usr/share/wordlists/SecLists/Discovery/Web-Content/param-minimal.txt
/usr/share/wordlists/SecLists/Discovery/Web-Content/http-methods.txt
Troubleshooting
Slow performance
- Reduce thread count:
-t 10
- Use smaller wordlists
- Add timeout:
--timeout 5
Too many false positives
- Tighten filters (use
--sc instead of --hc)
- Add multiple filter conditions
- Verify with manual requests
Connection errors
- Check proxy configuration
- Verify target is accessible
- Use
--timeout for slow targets