Saltar al contenido principal

FFUF

Web Fuzzing2.xRed Team

Fuzzing web ultrarrápido para descubrir directorios, parámetros, virtual hosts y contenido oculto. Reemplaza a Gobuster y Dirb con filtros avanzados y múltiples modos de ataque.

Fase 1 — Fuzzing de directorios (Directory Discovery)

Encontrar directorios y archivos ocultos en el servidor web

FFUF reemplaza a Gobuster y Dirb para descubrir directorios, archivos y rutas ocultas en servidores web. Su ventaja principal es la velocidad y la capacidad de filtrar resultados por tamaño de respuesta, número de palabras, líneas o código HTTP.

La diferencia con Gobuster: FFUF permite filtrar por cualquier campo de la respuesta (tamaño, palabras, líneas, hash), eliminando automáticamente los 404 falsos que Gobuster muestra como positivos.

Uso básico:

ffuf -u https://target.com/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

El marcador FUZZ indica dónde se inyecta cada palabra de la wordlist.

bash
# Fuzzing básico de directorios
ffuf -u https://target.com/FUZZ \
  -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

# Filtrar por tamaño de respuesta (eliminar falsos positivos)
# Primero ejecutar sin filtro para ver tamaños comunes
ffuf -u https://target.com/FUZZ \
  -w wordlist.txt -mc 200,301,302,403

# Luego excluir el tamaño más común (ej: 4440 bytes = página 404 custom)
ffuf -u https://target.com/FUZZ \
  -w wordlist.txt -fs 4440

# Filtrar por número de palabras (exclude response con 128 palabras)
ffuf -u https://target.com/FUZZ \
  -w wordlist.txt -fw 128

# Filtrar por líneas de respuesta
ffuf -u https://target.com/FUZZ \
  -w wordlist.txt -fl 42

# Recursive fuzzing (descender en directorios encontrados)
ffuf -u https://target.com/FUZZ \
  -w wordlist.txt -recursion -recursion-depth 2

# Con autenticación básica
ffuf -u https://target.com/FUZZ \
  -w wordlist.txt -fc 401 \
  -H "Authorization: Basic YWRtaW46cGFzc3dvcmQ="

💡El flag más importante es -fs (filter by size). Ejecuta primero sin filtro para ver qué tamaño de respuesta tiene la página 404, luego exclúyelo con -fs <tamaño>. Esto elimina el 90% de falsos positivos.

Fase 2 — Fuzzing de parámetros (Parameter Discovery)

Encontrar parámetros ocultos o no documentados en URLs y formularios

FFUF puede fuzzing parámetros GET y POST para descubrir parámetros ocultos que no están documentados. Esto es útil para encontrar funcionalidades ocultas, endpoints de debug o campos que el desarrollador no quiso exponer.

Dos modos principales:

  • GET parameter fuzzing — Inyectar nombres de parámetros en la URL
  • POST parameter fuzzing — Inyectar nombres de parámetros en el body

Diferencia con Wordlists: Para parámetros se usa una wordlist específica de parámetros (ej: params.txt o burp-parameter-names.txt).

bash
# GET parameter fuzzing
# La URL tiene un parámetro conocido, buscar otros
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" \
  -w params.txt -H "Content-Type: application/x-www-form-urlencoded" \
  -fc 400

# POST con valor 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

# Fuzzing de headers
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

💡Para parámetros, usa wordlists como burp-parameter-names.txt de SecLists. Son más efectivos que wordlists genéricas porque contienen nombres reales de parámetros web.

Fase 3 — Virtual Host Discovery

Encontrar virtual hosts ocultos en el mismo servidor IP

Virtual Host (vhost) es cuando un servidor web aloja múltiples dominios en la misma IP. FFUF puede fuzzing el header Host para descubrir vhosts ocultos que no están en DNS público.

Por qué funciona: Muchos servidores responden diferente al header Host desconocido vs conocido. Puedes detectar vhosts comparando el tamaño de la respuesta.

bash
# Virtual host fuzzing
ffuf -u https://target.com/ \
  -H "Host: FUZZ.target.com" \
  -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
  -fs 0

# Filtrar por tamaño de respuesta (vhosts suelen tener tamaño diferente)
ffuf -u https://192.168.1.10/ \
  -H "Host: FUZZ.internal.local" \
  -w subdomains.txt -fs 0

# Con header adicional para bypass
ffuf -u https://192.168.1.10/ \
  -H "Host: FUZZ.target.com" \
  -H "X-Forwarded-For: 127.0.0.1" \
  -w subdomains.txt -fs 0

# Fuzzing de subdominios con DNS
ffuf -u https://FUZZ.target.com/ \
  -w subdomains.txt -fs 0

# Comparar respuestas para vhosts
# Si todos los vhosts retornan el mismo tamaño, usar -ac (auto-calibrate)
ffuf -u https://target.com/ \
  -H "Host: FUZZ.target.com" \
  -w subdomains.txt -ac

💡El flag -ac (auto-calibrate) hace que FFUF envíe una petición con un Host inexistente y use ese tamaño como referencia para filtrar automáticamente.

Fase 4 — Filtros avanzados y output

Refinar resultados con filtros por respuesta y exportar datos

La verdadera potencia de FFUF está en su sistema de filtros. Puedes filtrar por cualquier campo de la respuesta HTTP, lo que elimina el ruido y te muestra solo resultados interesantes.

Filtros disponibles:

  • -fc <code> — Filtrar por código HTTP (excluir)
  • -mc <code> — Match por código HTTP (incluir)
  • -fs <size> — Filtrar por tamaño de respuesta
  • -fw <words> — Filtrar por número de palabras
  • -fl <lines> — Filtrar por número de líneas
  • -fr <regex> — Filtrar por regex en la respuesta
  • -ac — Auto-calibrar (detectar falsos positivos automáticamente)
bash
# Auto-calibrate (recomendado para empezar)
ffuf -u https://target.com/FUZZ -w wordlist.txt -ac

# Filtros combinados
ffuf -u https://target.com/FUZZ -w wordlist.txt \
  -mc 200,301,302 -fs 4440 -fw 128

# Exportar resultados a JSON
ffuf -u https://target.com/FUZZ -w wordlist.txt \
  -o results.json -of json

# Exportar a CSV
ffuf -u https://target.com/FUZZ -w wordlist.txt \
  -o results.csv -of csv

# Output格式 disponibles: json, ejson, html, md, csv, all
ffuf -u https://target.com/FUZZ -w wordlist.txt \
  -o report.html -of html

# Delay entre peticiones (evitar rate limiting)
ffuf -u https://target.com/FUZZ -w wordlist.txt \
  -p 0.1 -ac

# Threads (por defecto 40)
ffuf -u https://target.com/FUZZ -w wordlist.txt \
  -t 20 -ac

💡Siempre empieza con -ac para auto-calibrar. Si el sitio tiene una página 404 personalizada, ejecuta primero sin filtro para ver el tamaño de esa página, luego usa -fs para excluirlo.

Labs Prácticos

Básico 20 min

Lab 1: Directory fuzzing con auto-calibrate

Objetivo

Usar FFUF para descubrir directorios ocultos en un servidor web, aplicando auto-calibrate para eliminar falsos positivos.

Escenario

Un servidor web tiene varios directorios ocultos (/admin, /backup, /config) que no aparecen en el mapa de navegación. Necesitas encontrarlos usando fuzzing de directorios con una wordlist común.

Pasos

1

Ejecutar FFUF con auto-calibrate para detectar falsos positivos

2

Analizar los resultados y identificar directorios reales vs páginas 404

3

Refinar la búsqueda excluyendo el tamaño de respuesta de la página 404

4

Enumerar contenido dentro de los directorios encontrados

bash — práctica
# PASO 1: Fuzzing básico con auto-calibrate
ffuf -u http://target.com/FUZZ \
  -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
  -ac -mc 200,301,302,403

# PASO 2: Ver resultados - buscar códigos 200, 301, 302, 403
# Identificar qué tamaño de respuesta tiene la página 404
# Si la mayoría de falsos positivos tienen size=4440, excluirlos

# PASO 3: Refinar con filtro por tamaño
ffuf -u http://target.com/FUZZ \
  -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
  -fs 4440 -mc 200,301,302,403

# PASO 4: Fuzzing recursivo en directorios encontrados
ffuf -u http://target.com/admin/FUZZ \
  -w /usr/share/wordlists/dirb/common.txt \
  -fs 4440 -ac

Resultado esperado

FFUF encontrará directorios ocultos como /admin (200), /backup (301), /config (403). El filtro -fs eliminará las páginas 404 falsas. El fuzzing recursivo revelará archivos dentro de /admin como config.php, users.json, etc.

Intermedio 30 min

Lab 2: Parameter fuzzing y vhost discovery

Objetivo

Descubrir parámetros ocultos en un endpoint API y virtual hosts en el mismo servidor usando fuzzing.

Escenario

Un endpoint API (/api/users?id=1) responde con diferentes tamaños cuando se añaden parámetros extra. Necesitas descubrir qué parámetros adicionales existen y si hay virtual hosts ocultos en el servidor.

Pasos

1

Fuzzing de parámetros GET para descubrir campos ocultos

2

Probar valores contra los parámetros encontrados

3

Fuzzing de virtual hosts comparando tamaños de respuesta

4

Documentar todos los hallazgos para el reporte de pentesting

bash — práctica
# PASO 1: Parameter fuzzing
ffuf -u "http://target.com/api/users?id=1&FUZZ=test" \
  -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt \
  -fc 400 -fs 0

# PASO 2: POST parameter fuzzing
ffuf -u http://target.com/api/login \
  -X POST -d "FUZZ=admin" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -w params.txt -fc 400

# PASO 3: Virtual host fuzzing
ffuf -u http://192.168.1.10/ \
  -H "Host: FUZZ.target.com" \
  -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
  -fs 0

# PASO 4: Exportar resultados
ffuf -u http://target.com/api/users?id=1&FUZZ=test \
  -w burp-parameter-names.txt -fc 400 \
  -o results.json -of json

Resultado esperado

El parameter fuzzing revelará parámetros ocultos como "debug", "admin", "format". El vhost fuzzing descubrirá subdominios internos como "admin.target.com", "api.target.com". Los resultados se exportarán a JSON para el reporte.

Aviso legal: Este contenido es estrictamente educativo. CyberFlows no apoya actividades ilegales. Úsalo solo en entornos autorizados.