ffuf - Web Content & API Discovery

VerifiedCaution

Discover hidden content, directories, subdomains, and API endpoints with ffuf, the fastest web fuzzer. Covers directory fuzzing, parameters, and virtual host enumeration.

Sby Skills Guide Bot
SecurityIntermediate
9/6/2026
Claude CodeCursorWindsurfCodex
#fuzzing#content-discovery#recon#subdomain-enumeration#web-security

Recommended for

Automated summary

This skill documents how to use ffuf, a Go-based web fuzzer, to discover hidden directories, subdomains, virtual hosts, and API endpoints from wordlists.

Strengths

  • Covers ffuf's main workflows: content discovery, GET/POST parameter fuzzing, DNS and virtual-host enumeration
  • Explains the essential filters (-fc, -fs, -mc, -mr) that keep results free of false positives
  • Includes advanced options: multiple FUZZ positions, recursion, extensions, rate limiting, and JSON output
  • Points to SecLists and provides copy-pasteable install commands

Limitations

  • Does not discuss the legal and ethical authorization requirements beyond an implicit hint in one example
  • Assumes the reader can pick and interpret wordlists, with no guidance on wordlist selection
  • Little detail on tuning throttling to avoid overwhelming a production server
  • No coverage of result analysis or chaining with other reconnaissance tools
When to use it

Use it when an authorized penetration test or bug bounty engagement needs mapping of hidden web content, subdomains, or undocumented API endpoints.

When not to use it

Do not use it against targets you are not explicitly authorized to test, or as a replacement for a full vulnerability scan.

Security analysis

Caution
Quality score90/100

The skill teaches web fuzzing with ffuf, a legitimate security tool, and includes clear authorization and rate-limiting guidance. It does not contain destructive or exfiltrating commands, but the network-scanning capability is powerful and could be misused, so it warrants caution.

Findings
  • •Instructs use of ffuf, a network fuzzing tool that sends numerous HTTP requests and can cause load or be used for unauthorized scanning if the user lacks permission.
  • •Includes a command to download and run a binary from GitHub releases without checksum verification, though this is common practice.
  • •Skill includes explicit authorization warning, but execution still relies on user compliance.
How this analysis is made

Examples

Hidden directory discovery
Run ffuf against https://staging.example.com to find hidden directories using common.txt, and filter out 404 responses.
Subdomain enumeration
Enumerate subdomains of example.com with ffuf and SecLists' top 5000 subdomain list, hiding 404s.
Authenticated API endpoint fuzzing
Fuzz API paths under https://api.example.com/v1/ with my bearer token, showing only 200, 401 and 403 responses.

name: ffuf description: >- Discover hidden content, directories, subdomains, and API endpoints with ffuf — the fastest web fuzzer. Use when someone asks to "find hidden directories", "fuzz URLs", "discover API endpoints", "subdomain enumeration", "content discovery", "ffuf", "brute force paths", or "find hidden files on a website". Covers directory fuzzing, parameter fuzzing, subdomain discovery, virtual host enumeration, and recursive scanning. license: Apache-2.0 compatibility: "Any OS. Go binary." metadata: author: terminal-skills version: "1.0.0" category: devops tags: ["security", "fuzzing", "recon", "ffuf", "content-discovery"]

ffuf (Fuzz Faster U Fool)

Overview

ffuf is the fastest web fuzzer available — written in Go, it discovers hidden files, directories, subdomains, and API endpoints by sending thousands of requests with wordlist-based payloads. Unlike dirbuster or gobuster, ffuf supports multiple fuzzing positions (URL, headers, POST body, cookies), response filtering, and recursive scanning.

When to Use

  • Discovering hidden directories and files on web servers
  • Finding undocumented API endpoints
  • Subdomain and virtual host enumeration
  • Parameter discovery (GET/POST)
  • Bug bounty reconnaissance
  • Pre-pentest content discovery

Instructions

Setup

# Install
go install github.com/ffuf/ffuf/v2@latest

# Or download binary
wget https://github.com/ffuf/ffuf/releases/latest/download/ffuf_linux_amd64.tar.gz
tar xzf ffuf_linux_amd64.tar.gz

# Get wordlists (SecLists is the standard)
git clone --depth 1 https://github.com/danielmiessler/SecLists.git

Directory Discovery

# Basic directory fuzzing — FUZZ keyword marks the injection point
ffuf -u https://target.com/FUZZ -w SecLists/Discovery/Web-Content/common.txt

# Filter by response code (ignore 404s)
ffuf -u https://target.com/FUZZ -w common.txt -fc 404

# Filter by response size (remove default pages)
ffuf -u https://target.com/FUZZ -w common.txt -fs 4242

# Match only specific codes
ffuf -u https://target.com/FUZZ -w common.txt -mc 200,301,302,403

# Recursive scanning — follow discovered directories
ffuf -u https://target.com/FUZZ -w common.txt -recursion -recursion-depth 2

# With extensions
ffuf -u https://target.com/FUZZ -w common.txt -e .php,.bak,.old,.txt,.json,.env

Subdomain Discovery

# Subdomain fuzzing via DNS
ffuf -u https://FUZZ.target.com -w SecLists/Discovery/DNS/subdomains-top1million-5000.txt -fc 404

# Virtual host discovery (different from DNS — checks Host header)
ffuf -u https://target.com -w subdomains.txt -H "Host: FUZZ.target.com" -fs 1234

API Endpoint Discovery

# REST API path fuzzing
ffuf -u https://api.target.com/v1/FUZZ -w SecLists/Discovery/Web-Content/api/api-endpoints.txt -mc 200,401,403

# API with authentication
ffuf -u https://api.target.com/v1/FUZZ -w api-endpoints.txt \
  -H "Authorization: Bearer eyJhbG..." -mc 200

# Parameter fuzzing (GET)
ffuf -u "https://target.com/api/users?FUZZ=value" -w SecLists/Discovery/Web-Content/burp-parameter-names.txt -fs 0

# POST body parameter fuzzing
ffuf -u https://target.com/api/login -X POST \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","FUZZ":"test"}' \
  -w params.txt -fc 400

Advanced Usage

# Multiple wordlists (two FUZZ positions: W1 and W2)
ffuf -u https://target.com/W1/W2 -w endpoints.txt:W1 -w ids.txt:W2

# Output to JSON for automation
ffuf -u https://target.com/FUZZ -w common.txt -o results.json -of json

# Throttled scanning (polite)
ffuf -u https://target.com/FUZZ -w common.txt -rate 50 -t 10

# Custom match on response body
ffuf -u https://target.com/FUZZ -w common.txt -mr "admin|dashboard|config"

Examples

Example 1: Full recon on a new target

User prompt: "I have permission to pentest example.com. Start with content discovery."

The agent will run ffuf for directory discovery with common.txt, then check for backup files (.bak, .old, .sql), hidden API endpoints, and admin panels.

Example 2: Find hidden API endpoints

User prompt: "Our API has undocumented endpoints left by previous developers. Find them."

The agent will fuzz API paths with REST-specific wordlists, try common API versioning patterns (/v1/, /v2/), and check HTTP methods (GET, POST, PUT, DELETE) on discovered endpoints.

Guidelines

  • ALWAYS have authorization — fuzzing without permission is illegal
  • Start with common.txt — then escalate to bigger wordlists if needed
  • Filter noise first — use -fc 404 or -fs <size> to remove false positives
  • Rate limit — -rate 50 for production targets, unlimited for local/staging
  • FUZZ is the keyword — place it wherever you want to inject wordlist entries
  • Extensions matter — -e .php,.bak,.env catches backup and config files
  • JSON output for automation — -o results.json -of json for pipeline integration
  • Recursive with caution — -recursion-depth 2 max to avoid infinite loops
  • SecLists is essential — the standard wordlist collection for web fuzzing

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/ffuf-web-content-api-discovery-mtpag6th/download' --output '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md.part' && mv '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md.part' '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Environment declared by the author: Any OS. Go binary.

Original excerpt: Setup
# Install
go install github.com/ffuf/ffuf/v2@latest

# Or download binary
wget https://github.com/ffuf/ffuf/releases/latest/download/ffuf_linux_amd64.tar.gz
tar xzf ffuf_linux_amd64.tar.gz

# Get wordlists (SecLists is the standard)
git clone --depth 1 https://github.com/danielmiessler/SecLists.git

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md' && test -s '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/ffuf' && cp -R '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th' '.claude/skills/ffuf'

Cursor
test -f '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md' && test -s '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/ffuf' && cp -R '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th' '.cursor/skills/ffuf'

Codex
test -f '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md' && test -s '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/ffuf' && cp -R '.skill-downloads/ffuf-web-content-api-discovery-mtpag6th' '.agents/skills/ffuf'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/ffuf-web-content-api-discovery-mtpag6th'

openskills read 'ffuf-web-content-api-discovery-mtpag6th'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/ffuf-web-content-api-discovery-mtpag6th/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills