ffuf (Fuzz Faster U Fool) es una herramienta de fuzzing web de alto rendimiento escrita en Go por Joona Hoikkala. Es la herramienta de referencia moderna para descubrimiento de directorios, archivos, vhosts, parámetros y endpoints de API en aplicaciones web. Viene incluida en Kali Linux y está documentada en certificaciones como OSCP, eJPT, CEH y en las rutas de aprendizaje de HackTheBox y TryHackMe.
Su punto diferencial frente a herramientas clásicas como Dirb o Gobuster es su flexibilidad total: la palabra clave FUZZ puede colocarse en cualquier parte de la petición HTTP (URL, cabeceras, cuerpo POST, cookies) y soporta múltiples palabras clave simultáneas. Además, su motor concurrente en Go lo hace extremadamente rápido.
sudo apt install apache2.La sintaxis de ffuf gira en torno a una idea central: la palabra clave FUZZ puede colocarse en cualquier parte de la petición HTTP. Donde aparezca FUZZ, ffuf sustituirá cada línea del diccionario y enviará la petición resultante.
| Flag | Tipo | Descripción | Ejemplo |
|---|---|---|---|
-mc | Match | Mostrar solo respuestas con estos códigos HTTP | -mc 200,301,302 |
-fc | Filter | Ocultar respuestas con estos códigos HTTP | -fc 404,403 |
-ms | Match | Mostrar solo respuestas de este tamaño exacto | -ms 1234 |
-fs | Filter | Ocultar respuestas de este tamaño (filtrar false positives) | -fs 4242 |
-mw | Match | Mostrar solo respuestas con este número de palabras | -mw 100 |
-fw | Filter | Ocultar respuestas con este número de palabras | -fw 1 |
-mr | Match | Mostrar solo respuestas que contengan este regex | -mr "admin" |
-fr | Filter | Ocultar respuestas que contengan este regex | -fr "not found" |
-ml | Match | Mostrar solo respuestas con este número de líneas | -ml 10 |
-fl | Filter | Ocultar respuestas con este número de líneas | -fl 0 |
La calidad de los resultados de ffuf depende directamente de la calidad de la wordlist usada. SecLists es la colección de referencia para pentesting web y cubre la mayoría de los casos de uso.
| Caso de uso | Wordlist recomendada | Tamaño |
|---|---|---|
| Directorios comunes (rapido) | /usr/share/seclists/Discovery/Web-Content/common.txt | 4.600 |
| Directorios completo | /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt | 220.560 |
| Directorios raft (muy bueno) | /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt | 30.000 |
| Archivos (con extensiones) | /usr/share/seclists/Discovery/Web-Content/raft-medium-files.txt | 17.000 |
| Archivos grandes | /usr/share/seclists/Discovery/Web-Content/raft-large-files.txt | 37.000 |
| Virtual hosts / subdominios | /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt | 5.000 |
| Subdominios completo | /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt | 20.000 |
| Parametros GET/POST | /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt | 2.500 |
| Extensiones de archivos | /usr/share/seclists/Fuzzing/extensions/CommonWebExtensions.fuzz.txt | ~30 |
| APIs REST verbs | /usr/share/seclists/Discovery/Web-Content/api/api-endpoints.txt | ~500 |
El filtrado de respuestas es la habilidad más importante para usar ffuf eficientemente. Sin filtros correctos, los resultados estarán llenos de falsos positivos que harán imposible encontrar los hallazgos reales. La estrategia es: primero identificar cómo responde el servidor a paths inválidos, y luego filtrar exactamente ese patrón.
-ac primero. Si hay muchos falsos positivos, añade -fs TAMANO manualmente. Puedes combinar varios filtros: -fc 404 -fs 0 -fw 1El uso más común de ffuf: descubrir directorios y rutas ocultas en una aplicación web. Muchos paneles de administración, páginas de backup y configuraciones sensibles están simplemente ocultos por su URL, no protegidos.
sudo systemctl start apache2) y crea algunos directorios de prueba en /var/www/html/. Luego usa ffuf para descubrirlos. ¿Qué wordlist detecta más directorios?Ver solución
Buscar archivos específicos es tan importante como buscar directorios. Archivos de configuración, backups, logs y páginas abandonadas pueden revelar credenciales, código fuente o información sensible.
secreto.php y otro backup.sql en el directorio raíz de tu Apache local. Usa ffuf con el flag -e para descubrir ambos archivos. ¿Qué extensiones incluirías en el flag?Ver solución
Virtual host fuzzing (o vhost fuzzing) consiste en descubrir subdominios y virtual hosts que están alojados en el mismo servidor IP pero responden a diferentes cabeceras Host. En ffuf se consigue colocando FUZZ en la cabecera Host en lugar de en la URL.
Muchas aplicaciones tienen entornos de desarrollo, APIs internas o paneles de administración accesibles solo por su vhost específico.
| Técnica | Cómo funciona | Detecta | Requiere |
|---|---|---|---|
| VHost fuzzing (ffuf) | Cambia la cabecera Host HTTP, misma IP | Vhosts en el mismo servidor (sin DNS) | Acceso directo a la IP del servidor |
| DNS brute force (gobuster/subfinder) | Resuelve nombres DNS reales | Subdominios con registros DNS | Acceso a DNS del objetivo |
VHost fuzzing puede descubrir aplicaciones internas que no tienen registro DNS público: panel de admin accesible solo por IP con cabecera Host específica, entornos de staging, APIs internas...
public.local y secret.local, apuntando a directorios diferentes. Usa ffuf para descubrir secret.local mediante VHost fuzzing.Ver solución
Muchas vulnerabilidades web como IDOR, SSRF, o inyecciones dependen de parámetros ocultos no documentados. ffuf puede fuzzear parámetros tanto en peticiones GET como en el cuerpo de peticiones POST.
id en /vulnerabilities/sqli/?id=FUZZ. ¿Qué valores de ID producen respuestas de tamaño diferente?Ver solución
Muchas aplicaciones requieren autenticación para acceder a áreas de interés. ffuf puede enviar cookies de sesión, tokens JWT, cabeceras de autorización o credenciales HTTP Basic para fuzzear dentro de áreas protegidas.
Ver solución
Las APIs REST modernas exponen múltiples endpoints que pueden no estar documentados. ffuf es la herramienta ideal para descubrir la superficie de ataque de una API: versiones, recursos y métodos HTTP soportados.
Ver solución
Una de las características más potentes de ffuf es el soporte para múltiples palabras clave (FUZZ, W2, NOMBRE_PERSONALIZADO). Permite fuzzear varias posiciones simultáneamente con diferentes diccionarios, lo que es muy útil para combinaciones de usuario+contraseña, extensiones variables, o combinaciones de paths.
| Modo | Descripción | Uso |
|---|---|---|
| clusterbomb (default) | Todas las combinaciones posibles de todas las listas. Total = W1 x W2 x... | Credential stuffing, path + ext |
| pitchfork | Itera en paralelo: W1[0]+W2[0], W1[1]+W2[1]... Las listas deben tener el mismo tamaño | Usuario + contraseña del mismo archivo |
| sniper (solo FUZZ) | Una sola lista, una sola posición | Fuzzing estandar de una posicion |
Ver solución
Configuración avanzada para objetivos con WAF, rate limiting o cuando necesitas ser más sigiloso. También cómo configurar ffuf mediante archivo de configuración para reutilizar opciones.
~/.ffufrc con un User-Agent personalizado y un delay de 200ms. Verifica que ffuf lo usa sin pasarle esas opciones por línea de comandos.Ver solución
ffuf puede integrarse en pipelines de reconocimiento y pentesting automatizados. La salida en JSON facilita el procesado posterior con Python, jq o herramientas de seguimiento de vulnerabilidades.
Ver solución
| Herramienta | Lenguaje | Fuerte en | Débil en | Mejor uso |
|---|---|---|---|---|
| ffuf | Go | Velocidad, flexibilidad total (FUZZ en cualquier parte), multi-FUZZ, filtros potentes | Curva de aprendizaje del filtrado | Todos los casos: dirs, vhosts, params, APIs |
| Gobuster | Go | Simple, rapido, modo DNS, intuitivo | Menos flexible que ffuf, sin multi-FUZZ | Discovery rapido de dirs y DNS |
| Dirb | C | Clasico, estable, incluido en Kali | Lento (single thread), menos opciones | Auditorias basicas, legacy |
| Dirsearch | Python | Recursivo por defecto, soporte de extensiones bueno | Mas lento que ffuf | Directory fuzzing con recursion automatica |
| Feroxbuster | Rust | Muy rapido, recursion automatica excelente | Menos opciones de filtrado que ffuf | Fuzzing recursivo intensivo |
| Wfuzz | Python | Muy similar a ffuf, maduro | Mas lento que ffuf | Alternativa clasica a ffuf |
FUZZ en cualquier parte de la petición HTTP, sus potentes filtros, el soporte para múltiples palabras clave simultáneas y su velocidad (Go) la hacen insustituible en pentesting web moderno. Es la herramienta preferida para CTFs (HTB, THM) y auditorías de aplicaciones web.Desde la perspectiva defensiva, el fuzzing genera un patrón de tráfico muy característico y detectable. Saber cómo detectarlo y mitigarlo es tan importante como saber usarlo.
| Mitigación | Cómo | Qué bloquea |
|---|---|---|
| Rate limiting | Nginx limit_req_zone, Apache mod_ratelimit, WAF | Fuzzing rapido, reduce velocidad efectiva |
| Bloqueo por User-Agent | Bloquear "ffuf", "Nikto", "Gobuster", "Go-http-client" | Herramientas sin UA personalizado |
| IP blocking / geo-blocking | fail2ban, WAF, iptables tras N 404s | Fuzzing desde IP fija conocida |
| CAPTCHA en areas sensibles | Login, registro, formularios criticos | Fuzzing automatizado de credenciales |
| Respuestas uniformes para 404 | Devolver siempre el mismo tamano para 404 | Dificulta el autocalibration de ffuf |
| WAF (Web Application Firewall) | Cloudflare, ModSecurity, AWS WAF | Patrones de fuzzing conocidos |