Source: Bug Bounty Bootcamp by Vickie Li
Top bug bounty hunters automate the majority of their workflow: continuous recon, automated scanning, and immediate verification when a potential vulnerability is flagged. Fuzzing (fuzz testing) drives a large share of new CVE discoveries and is equally applicable to web applications.
Fuzzing is the process of sending a wide range of invalid and unexpected data to an application and monitoring it for exceptions. The goal is to induce unexpected behavior (crashes, errors, unexpected output) and determine whether it is exploitable.
Web application fuzzing targets common injection points to expose vulnerabilities like XSS, SQL injection, IDORs, open redirects, and authentication bypass – without requiring source code access.
A web fuzzer replaces marked injection points in requests with strings from a wordlist, fires the requests, and tracks server responses. Wfuzz uses the keyword FUZZ as the injection point marker:
wfuzz -w wordlist.txt http://example.com/FUZZ
This generates one request per wordlist entry, substituting FUZZ with each string.
Identify all locations where user input enters the application: URL path segments, query parameters, POST body parameters, HTTP headers, cookies.
Classify injection points by likely vulnerability:
# IDOR candidates -- numeric IDs GET /email_inbox?user_id=FUZZ POST /delete_user (body: user_id=FUZZ) # XSS candidates -- search/display fields GET /search?q=FUZZ POST /send_email (body: title=FUZZ&body=FUZZ)
Match the wordlist to the vulnerability type:
Discovery/Web-Content/)Fuzzing/XSS/)Fuzzing/SQLi/)Passwords/)Recommended resources:
Also try randomly generated payloads – extremely long strings, mixed encodings, special characters (newline, null byte, line feed) – to provoke unexpected behavior and discover new vulnerability classes.
Burp Intruder (GUI, integrated with Burp proxy):
Wfuzz (CLI, unrestricted):
pip install wfuzz
Common Wfuzz commands:
Path enumeration (hide 404s, follow redirects):
wfuzz -w wordlist.txt -f output.txt --hc 404 --follow http://example.com/FUZZ
IDOR scanning:
wfuzz -w ids.txt http://example.com/view_inbox?user_id=FUZZ
HTTP Basic auth brute-force (single wordlist):
wfuzz -w wordlist.txt -H "Authorization: Basic FUZZ" http://example.com/admin
HTTP Basic auth brute-force (username + password lists):
wfuzz -w usernames.txt -w passwords.txt --basic FUZZ:FUZ2Z http://example.com/admin
Open redirect testing (verbose + follow to detect redirects):
wfuzz -w wordlist.txt -v --follow http://example.com?redirect=FUZZ
XSS reflection detection (filter for reflected payloads):
wfuzz -w xss.txt --filter "content~FUZZ" http://example.com/search?q=FUZZ
SQLi via POST body:
wfuzz -w sqli.txt -d "user_id=FUZZ" http://example.com/get_user
Interpret responses based on the vulnerability type being tested:
| Vulnerability | What to look for |
|---|---|
| Path enum | 200 status = valid path; 404 = not found |
| IDOR | 200 with content vs 403/404; response length differences |
| SQLi | Response time spike (time-based), length increase (data extracted), status code change |
| XSS | Payload reflected in response (use content~FUZZ filter) |
| Open redirect | Redirect to your domain (use –follow -v) |
Think of fuzzing as a metal detector – it finds suspicious spots; you inspect them manually to confirm and assess impact.
| Static Analysis | Fuzzing | |
| Source code required | Yes | No |
| Tests live behavior | No | Yes |
| Finds logic errors | Yes | Rarely |
| Finds injection bugs | Yes | Yes |
| Black-box friendly | No | Yes |
Use both: static analysis when source is available, fuzzing for black-box targets. Neither replaces manual testing for business logic errors and multi-step vulnerabilities.
–delay in Wfuzz when necessary; always obtain permission before heavy fuzzing