Help us improve
Share bugs, ideas, or general feedback.
From ffuf-web-fuzzing
Guides ffuf web fuzzing for authorized pentests: directory/subdomain discovery, parameter fuzzing, authenticated raw requests, auto-calibration, rate limiting, and JSON output analysis. Use for scans, output review, or strategy building.
npx claudepluginhub trailofbits/skills-curated --plugin ffuf-web-fuzzingHow this skill is triggered — by the user, by Claude, or both
Slash command
/ffuf-web-fuzzing:ffuf-web-fuzzingThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guidance for using ffuf (Fuzz Faster U Fool) effectively during authorized penetration testing.
Guides ffuf usage for web fuzzing in authorized penetration testing: directory/file discovery, subdomain enumeration, parameter fuzzing, POST data, auto-calibration, and result analysis.
Discovers unprotected pages, APIs, admin panels, and debug interfaces via directory/file enumeration with ffuf and gobuster during authorized pentests.
Guides setting up and running fuzz campaigns with AFL++, libFuzzer, Honggfuzz, Boofuzz, and syzkaller. Covers harness writing, corpus curation, mutation strategies, coverage measurement, and crash triage for file parsers, network protocols, kernel drivers, and firmware.
Share bugs, ideas, or general feedback.
Guidance for using ffuf (Fuzz Faster U Fool) effectively during authorized penetration testing.
ffuf must be installed: brew install ffuf (macOS) or go install github.com/ffuf/ffuf/v2@latest
-ac is mandatory. Without it, results are buried in false positives and analysis is wasted effort.-t 200 triggers WAFs, gets you blocked, and may crash staging environments. Start with -t 10 -rate 2 for production targets.--request req.txt is simpler and more reliable than chaining -H and -b flags. Capture once, fuzz many times.-ac (auto-calibration) unless you have a specific, documented reason not to-o results.json for later analysis-rate and -t flags--request for auth -- raw request files beat command-line header chains# In URL path
ffuf -w wordlist.txt -u https://target.com/FUZZ -ac
# In headers
ffuf -w wordlist.txt -u https://target.com -H "Host: FUZZ.target.com" -ac
# In POST body
ffuf -w wordlist.txt -X POST -d "user=admin&pass=FUZZ" -u https://target.com/login -ac
# Multiple positions with custom keywords
ffuf -w endpoints.txt:EP -w ids.txt:ID -u https://target.com/EP/ID -mode pitchfork -ac
-ac automatically detects and filters repetitive false-positive responses. It adapts to the target's specific behavior and removes noise from dynamic content.
ffuf -w wordlist.txt -u https://target.com/FUZZ -ac # Standard
ffuf -w wordlist.txt -u https://target.com/FUZZ -ach # Per-host (multi-host scans)
ffuf -w wordlist.txt -u https://target.com/FUZZ -acc "404" # Custom calibration string
ffuf -w /opt/SecLists/Discovery/Web-Content/raft-large-directories.txt \
-u https://target.com/FUZZ -e .php,.html,.txt,.bak \
-ac -c -v -o results.json
ffuf -w /opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt \
-u https://FUZZ.target.com -ac -c -v -o results.json
ffuf -w /opt/SecLists/Discovery/Web-Content/api/api-endpoints.txt \
-u https://api.target.com/v1/FUZZ \
-H "Authorization: Bearer YOUR_TOKEN_HERE" -mc 200,201 -ac -c
Capture a full authenticated request, save to req.txt, insert FUZZ:
POST /api/v1/users/FUZZ HTTP/1.1
Host: target.com
Authorization: Bearer YOUR_TOKEN_HERE
Cookie: session=YOUR_SESSION_ID
Content-Type: application/json
{"action":"view","id":"1"}
ffuf --request req.txt -w wordlist.txt -ac -o results.json
See references/request-templates.md for pre-built templates covering bearer tokens, session cookies, API keys, and GraphQL.
Authenticated fuzzing requires real credentials that the agent cannot obtain independently. When the user asks for authenticated fuzzing:
req.txt) with auth headers already includedreq.txt format)req.txtffuf --request req.txt -w <(seq 1 10000) -ac -mc 200 -o idor_results.json
| Environment | Flags | Notes |
|---|---|---|
| Production (stealth) | -rate 2 -t 10 | Avoid WAF triggers |
| Production (normal) | -rate 10 -t 20 | Balanced |
| Staging/Dev | -rate 50 -t 40 | Faster |
| Local/Lab | No limit, -t 100 | Maximum speed |
Save output as JSON (-o results.json), then read the file and focus on:
Use -fs to filter by response size and -fc to filter by status code when auto-calibration isn't sufficient. Run ffuf -h for the full list of match/filter flags.