¿Qué es FFUF?
FFUF (Fuzz Faster U Fool) es una herramienta de fuzzing web escrita en Go. Es la sucesora moderna de Gobuster y Dirb, con ventajas significativas:
- Velocidad — Multithreaded en Go, mucho más rápido que Gobuster
- Filtros avanzados — Filtra por tamaño, palabras, líneas, regex, código HTTP
- Auto-calibrate — Detecta falsos positivos automáticamente
- Múltiples modos — Directory, parameter, vhost, POST data, header fuzzing
- Output flexible — JSON, CSV, HTML, Markdown
Importante: FFUF es una herramienta de auditoría de seguridad. Solo debe usarse con autorización explícita del propietario del sistema.
Instalación
# Kali Linux — preinstalado
ffuf -h
# Go install
go install github.com/ffuf/ffuf/v2@latest
# Docker
docker run -it ffuf/ffuf -h
# Archivo release
# https://github.com/ffuf/ffuf/releases
Directory Fuzzing
El uso más común: descubrir directorios y archivos ocultos en el servidor web.
# Fuzzing básico
ffuf -u https://target.com/FUZZ \
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# El marcador FUZZ se reemplaza por cada palabra de la wordlist
Eliminar falsos positivos
El mayor problema del fuzzing es el ruido. FFUF lo resuelve con filtros:
# Auto-calibrate (recomendado para empezar)
ffuf -u https://target.com/FUZZ -w wordlist.txt -ac
# Filtrar por tamaño de respuesta
# Primero ejecutar sin filtro para ver el tamaño de la página 404
ffuf -u https://target.com/FUZZ -w wordlist.txt
# Si la página 404 tiene size=4440, excluir:
ffuf -u https://target.com/FUZZ -w wordlist.txt -fs 4440
# Filtrar por número de palabras
ffuf -u https://target.com/FUZZ -w wordlist.txt -fw 128
# Filtrar por líneas
ffuf -u https://target.com/FUZZ -w wordlist.txt -fl 42
# Combinar filtros
ffuf -u https://target.com/FUZZ -w wordlist.txt \
-mc 200,301,302,403 -fs 4440 -fw 128
Recursive fuzzing
# Fuzzing recursivo (descender en directorios encontrados)
ffuf -u https://target.com/FUZZ -w wordlist.txt \
-recursion -recursion-depth 2
# Con filtro de exclude
ffuf -u https://target.com/FUZZ -w wordlist.txt \
-recursion -fs 4440
Parameter Discovery
Descubrir parámetros ocultos en URLs y formularios:
# GET parameter fuzzing
ffuf -u "https://target.com/page?id=1&FUZZ=test" \
-w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt \
-fc 400
# POST parameter fuzzing
ffuf -u https://target.com/api/login \
-X POST -d "FUZZ=admin" \
-H "Content-Type: application/x-www-form-urlencoded" \
-w params.txt -fc 400
# POST value fuzzing (probar valores contra parámetro conocido)
ffuf -u https://target.com/api/search \
-X POST -d "query=FUZZ" \
-w payloads.txt -H "Content-Type: application/json" \
-fs 0
Virtual Host Discovery
Encontrar virtual hosts ocultos en el mismo servidor:
# Vhost fuzzing
ffuf -u https://192.168.1.10/ \
-H "Host: FUZZ.target.com" \
-w subdomains.txt -fs 0
# Con auto-calibrate
ffuf -u https://192.168.1.10/ \
-H "Host: FUZZ.target.com" \
-w subdomains.txt -ac
Header Fuzzing
# Fuzzing de headers personalizados
ffuf -u https://target.com/admin \
-H "FUZZ: admin" \
-w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt \
-fs 4440
# Fuzzing de cookies
ffuf -u https://target.com/admin \
-b "session=abc123; FUZZ=admin" \
-w params.txt -fs 4440
# Fuzzing de User-Agent
ffuf -u https://target.com/ \
-H "User-Agent: FUZZ" \
-w user-agents.txt -fs 4440
Output y Exportación
# JSON output
ffuf -u https://target.com/FUZZ -w wordlist.txt \
-o results.json -of json
# CSV output
ffuf -u https://target.com/FUZZ -w wordlist.txt \
-o results.csv -of csv
# HTML report
ffuf -u https://target.com/FUZZ -w wordlist.txt \
-o report.html -of html
# Todos los formatos disponibles
# json, ejson, html, md, csv, all
FFUF vs. Gobuster vs. Dirb
| Característica | FFUF | Gobuster | Dirb |
|---|---|---|---|
| Velocidad | Muy rápida (Go) | Rápida (Go) | Lenta (C) |
| Filtros | -fs, -fw, -fl, -ac | -s (solo status) | Limitados |
| Auto-calibrate | Sí | No | No |
| Modos | dir, vhost, param, POST | dir, dns, vhost | Solo dir |
| Output | JSON, CSV, HTML | Solo texto | Solo texto |
| Recursión | Sí | Sí | No |
| Ideal para | Pentest profesional | Uso rápido | Legacy |
Recomendación: Usa FFUF para todo fuzzing web. Gobuster solo paraDNS brute-force rápido (gobuster dns).
Wordlists recomendadas
# Directorios comunes
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# SecLists (mejor opción)
https://github.com/danielmiessler/SecLists
SecLists/Discovery/Web-Content/common.txt
SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt
# Parámetros
SecLists/Discovery/Web-Content/burp-parameter-names.txt
# Subdominios
SecLists/Discovery/DNS/subdomains-top1million-5000.txt
Errores Comunes
Demasiados resultados falsos
→ Usa -ac para auto-calibrate o -fs <tamaño> para excluir la página 404
Rate limiting / 429 Too Many Requests
→ Añade -p 0.1 (delay de 100ms) o reduce threads con -t 10
"FUZZ not found in wordlist"
→ El marcador debe ser exactamente FUZZ (mayúsculas)
Resultados vacíos → Verifica que la URL sea accesible y que la wordlist no esté vacía
Práctica en Laboratorios
# DVWA — Directory fuzzing
ffuf -u http://localhost/dvwa/FUZZ -w common.txt -fc 401
# Juice Shop — Parameter fuzzing
ffuf -u "http://localhost:3000/api/Products/1?FUZZ=test" \
-w burp-parameter-names.txt -fc 400
# HackTheBox — máquinas con web fuzzing
# Probar en: Jerry, Arctic, Blue, Optimum