
ffuf-web-fuzzing
Expert guidance for ffuf web fuzzing during authorized penetration testing. Covers directory discovery, subdomain enumeration, parameter fuzzing, authenticated fuzzing with raw requests, auto-calibration, and result analysis. Use when running ffuf scans, analyzing ffuf output, or building fuzzing strategies for web targets.
- Installs
- 99
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/trailofbits/skills-curated --skill ffuf-web-fuzzing- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads ffuf-web-fuzzing automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
FFUF Web Fuzzing
Guidance for using ffuf (Fuzz Faster U Fool) effectively during authorized penetration testing.
Prerequisites
ffuf must be installed: brew install ffuf (macOS) or go install github.com/ffuf/ffuf/v2@latest
When to Use
- Running directory, file, or subdomain discovery against web targets
- Fuzzing API endpoints, parameters, or POST data
- Authenticated fuzzing with raw HTTP requests
- Analyzing ffuf JSON output for anomalies and interesting findings
- Building fuzzing strategies (wordlist selection, filtering, rate limiting)
- IDOR testing with authenticated sessions
When NOT to Use
- Target system is not in scope or authorization is unclear
- Passive reconnaissance is more appropriate (use OSINT tools instead)
- The target is a production system and rate limiting hasn't been configured
- You need a full vulnerability scanner (use Burp Suite, Nuclei, etc.)
- Testing for logic flaws that require multi-step interaction
Rationalizations to Reject
- "Auto-calibration is optional" --
-acis mandatory. Without it, results are buried in false positives and analysis is wasted effort. - "More threads = faster results" -- Hammering a target with
-t 200triggers WAFs, gets you blocked, and may crash staging environments. Start with-t 10 -rate 2for production targets. - "I'll filter later" -- Set up filtering before the scan. Running a 220k wordlist without filters and then trying to grep through the noise is backwards.
- "The default wordlist is fine" -- Wordlist selection is the most important decision. A generic wordlist misses technology-specific paths. See references/wordlists.md.
- "Raw requests are too much work" -- For authenticated fuzzing,
--request req.txtis simpler and more reliable than chaining-Hand-bflags. Capture once, fuzz many times.
Critical Rules
- Always use
-ac(auto-calibration) unless you have a specific, documented reason not to - Always save output with
-o results.jsonfor later analysis - Rate limit production targets with
-rateand-tflags - Use
--requestfor auth -- raw request files beat command-line header chains - Confirm authorization first -- before running any scan, verify the user has written permission for the target. Ask if unclear.
Core Concepts
The FUZZ Keyword
# 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
Auto-Calibration
-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
Common Patterns
Directory Discovery
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
Subdomain Enumeration
ffuf -w /opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt \
-u https://FUZZ.target.com -ac -c -v -o results.json
API Endpoint Discovery
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
Authenticated Fuzzing with Raw Requests
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: Agent Workflow
Authenticated fuzzing requires real credentials that the agent cannot obtain independently. When the user asks for authenticated fuzzing:
- Ask the user to provide ONE of:
- A raw HTTP request file (
req.txt) with auth headers already included - A curl command from browser DevTools (convert it to
req.txtformat) - Individual credentials (Bearer token, session cookie, API key)
- A raw HTTP request file (
- If given a curl command, convert it to raw HTTP request format and write to
req.txt - If given individual credentials, use a template from references/request-templates.md and substitute real values
- Never fabricate or guess authentication tokens
IDOR Testing
ffuf --request req.txt -w <(seq 1 10000) -ac -mc 200 -o idor_results.json
Rate Limiting
| 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 |
Analyzing Results
Save output as JSON (-o results.json), then read the file and focus on:
- Anomalous status codes -- anything other than the baseline 404/403
- Size outliers -- responses significantly larger or smaller than average
- Interesting keywords in URLs -- admin, api, backup, config, .git, .env
- Timing anomalies -- slow responses may indicate SQL injection or heavy processing
- Follow-up targets -- interesting findings warrant deeper fuzzing
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.
References
- Wordlist selection guide -- recommended SecLists by scenario
- Authenticated request templates -- pre-built req.txt for bearer tokens, cookies, API keys
- ffuf official docs
- SecLists
FAQ
What does the ffuf-web-fuzzing skill do?
Expert guidance for ffuf web fuzzing during authorized penetration testing. Covers directory discovery, subdomain enumeration, parameter fuzzing, authenticated fuzzing with raw requests, auto-calibration, and result analysis. Use when running ffuf scans, analyzing ffuf output, or building fuzzing strategies for web targets.
How do I install ffuf-web-fuzzing?
Run npx skills add https://github.com/trailofbits/skills-curated --skill ffuf-web-fuzzing in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/ffuf-web-fuzzing/ (personal) or .claude/skills/ffuf-web-fuzzing/ (project).
Which AI agents can use ffuf-web-fuzzing?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is ffuf-web-fuzzing safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains ffuf-web-fuzzing?
It is published by trailofbits in trailofbits/skills-curated. It has 99 recorded installs.
More from trailofbits/skills-curated
ghidra-headless
trailofbits/skills-curated
Reverse engineers binaries using Ghidra's headless analyzer. Use when decompiling executables, extracting functions, strings, symbols, or analyzing call graphs from compiled binaries without the Ghidra GUI.
humanizer
trailofbits/skills-curated
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases. 30c5c8d (Update humanizer plugin to upstream v2.2.0)
skill-extractor
trailofbits/skills-curated
Extracts reusable skills from work sessions. Use when: (1) a non-obvious problem was solved worth preserving, (2) a pattern was discovered that would help future sessions, (3) a workaround or debugging technique needs documentation. Manual invocation only via /skill-extractor command - no automatic triggers or hooks.
openai-develop-web-game
trailofbits/skills-curated
Use when the agent is building or iterating on a web game (HTML/JS) and needs a reliable development + testing loop: implement small changes, run a Playwright-based test script with short input bursts and intentional pauses, inspect screenshots/text, and review console errors with rendergametotext. Originally from OpenAI's curated skills catalog.
planning-with-files
trailofbits/skills-curated
Implements file-based planning for complex multi-step tasks. Creates taskplan.md, findings.md, and progress.md as persistent working memory. Use when starting tasks requiring 5 tool calls, multi-phase projects, research, or any work where losing track of goals and progress would be costly.
security-awareness
trailofbits/skills-curated
Teaches agents to recognize and avoid security threats during normal activity. Covers phishing detection, credential protection, domain verification, and social engineering defense. Use when building or operating agents that access email, credential vaults, web browsers, or sensitive data.
Popular testing & qa skills
tdd
mattpocock/skills
Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.
grilling
mattpocock/skills
Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.
migrate-to-shoehorn
mattpocock/skills
Migrate test files from as type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace as in tests, or needs partial test data.
run-train
lllllllama/rigorpilot-skills
Rigor Train skill for deep learning research repositories. Use when a documented or selected training command should be run conservatively for startup verification, short-run verification, full kickoff, or resume, with command, config, seed, log, checkpoint, status, and metric evidence written to standardized trainoutputs/. Do not use for environment setup, exploratory sweeps, speculative idea implementation, or end-to-end orchestration.
test-driven-development
obra/superpowers
Use when implementing any feature or bugfix, before writing implementation code
finishing-a-development-branch
obra/superpowers
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work