unwaf
Descubre la IP de origen real detrás de un WAF/CDN usando técnicas pasivas.
go install github.com/mmarting/unwaf@latestunwaf automatiza el proceso de encontrar IPs de origen que evitan la protección WAF/CDN. Combina 15 métodos de descubrimiento pasivo (la mayoría con tier gratuito) y verifica candidatos mediante un sistema de puntuación multi-señal: similitud HTML (60%), coincidencia de certificados SSL (25%) y comparación de cabeceras HTTP (15%). Incluye fingerprinting uTLS de Chrome para evadir detección TLS del WAF, soporte HTTP/2, escaneo de vecinos CIDR, consulta ASN, soporte proxy, procesamiento por lotes y salida JSON. Sin escaneo activo, sin fuerza bruta, solo reconocimiento pasivo inteligente.
Cómo funciona
Detección WAF
Valida la resolución DNS actual contra rangos IP conocidos de WAF/CDN e identifica mediante cabeceras HTTP
Hashing de Favicon
Descarga favicon.ico y genera hashes MD5/SHA256/MMH3 para búsqueda externa
Descubrimiento de IPs
Ejecuta todos los métodos habilitados (hasta 15 fuentes) para recopilar IPs candidatas
Filtrado
Elimina IPs de WAF/CDN (CIDRs descargados dinámicamente) y registros DNS actuales
Escaneo de Puertos
Comprueba candidatos en 8 puertos web comunes en paralelo
Verificación
Puntúa candidatos usando similitud HTML (60%), certificados SSL (25%) y cabeceras HTTP (15%)
Escaneo de Vecinos
Opcionalmente escanea vecinos CIDR /24 de IPs confirmadas
Consulta ASN
Identifica ASN y organización para IPs de origen confirmadas
Resultados
Muestra coincidencias con desglose de puntuación, info ASN y comandos de verificación
Características
- 15 métodos de descubrimiento (6 gratuitos, 8 con tier gratuito, 1 de pago)
- Verificación multi-señal: similitud HTML (60%), certificados SSL (25%), cabeceras HTTP (15%)
- Confirmación de WAF: comprueba si el dominio está realmente detrás de un WAF antes de escanear
- Fingerprinting de WAF: identifica Cloudflare, Akamai, AWS CloudFront, Fastly, Sucuri, Imperva, FortiWeb, Radware, Azure Front Door, Google Cloud Armor, Vercel, Netlify y más
- Fingerprinting uTLS de Chrome para evadir WAFs que detectan el stack TLS de Go
- Soporte HTTP/2 con fallback a h1 y cabeceras realistas de navegador
- Hashing de favicon (MD5, SHA256, MMH3) para búsquedas en Shodan/Censys
- Escaneo de vecinos CIDR /24 para IPs de origen cercanas
- Consulta ASN/organización para IPs confirmadas
- Descarga dinámica de CIDRs de Cloudflare con soporte IPv6
- Soporte proxy (HTTP, SOCKS5)
- Rate limiting y lógica de reintentos con backoff exponencial
- Procesamiento por lotes con lista de dominios
- Salida en formato JSON para automatización
- Modo silencioso (-q): muestra solo IPs para encadenar con otras herramientas
- Entrada inteligente: acepta tanto example.com como https://example.com/path
- Escaneo concurrente con workers configurables
Métodos de Descubrimiento
| Método | Tipo | Descripción |
|---|---|---|
| SPF records | Incluido | Extrae IPs de mecanismos SPF ip4:/ip6: |
| MX records | Incluido | Resuelve hostnames de servidores de correo (omite Google/Microsoft/etc.) |
| Subdomain probing | Incluido | Resuelve 30+ subdominios comunes (mail, dev, staging, origin...) |
| Certificate Transparency | Incluido | Consulta crt.sh para todos los subdominios, resuelve a IPs sin WAF |
| WAF detection | Incluido | Identifica el WAF mediante cabeceras HTTP |
| Favicon hashing | Incluido | Genera hashes MD5/SHA256/MMH3 para búsqueda de favicon en Shodan/Censys |
| AlienVault OTX | API gratuita | Registros DNS pasivos (API key opcional mejora los límites) |
| RapidDNS | API gratuita | Enumeración de subdominios mediante scraping HTML |
| HackerTarget | API gratuita | API de búsqueda de hosts (límite de 50 req/día) |
| Wayback Machine | API gratuita | Extrae hostnames de snapshots archivados vía CDX API |
| Shodan | API gratuita | Búsqueda de hosts por SSL CN, hostname, hash de favicon (tier gratuito disponible) |
| DNSDB / Farsight | API gratuita | Registros DNS históricos (Community Edition: 500 consultas/mes) |
| SecurityTrails history | API gratuita | Registros DNS A históricos (50 req/mes en tier gratuito) |
| ViewDNS history | API gratuita | Registros DNS A históricos (250 peticiones gratis, sin tarjeta) |
| Censys SSL search | API de pago | Encuentra hosts con certificados SSL que coinciden con el dominio |
Puntuación de Verificación
| Señal | Peso | Descripción |
|---|---|---|
| Similitud HTML | 60% | Comparación de texto basada en diff entre candidato y referencia |
| Certificados SSL | 25% | Coincidencia de serial (50%), CN (25%), solapamiento SAN (25%) |
| Cabeceras HTTP | 15% | Comparación de Server, X-Powered-By, Set-Cookie |
| Códigos de estado | ajuste | +/-5-20% bonus/penalización según alineación de código de estado |
Ejemplos de Uso
unwaf -d example.com
Escaneo básico solo con métodos gratuitos
unwaf -d https://example.com/path
Las URLs completas también funcionan
unwaf -d example.com -s original.html
Usar un archivo HTML guardado manualmente como referencia
unwaf -d example.com -t 40
Umbral más bajo para detectar coincidencias parciales
unwaf -d example.com -w 100
Aumentar la concurrencia para escaneo más rápido
unwaf -d example.com -v
Modo detallado
unwaf -d example.com --json
Formato de salida JSON
unwaf -d example.com --scan-neighbors
Escanear vecinos CIDR /24 de IPs descubiertas
unwaf -d example.com --proxy socks5://127.0.0.1:9050
Enrutar a través de un proxy
unwaf -d example.com --rate-limit 2 --timeout 5
Rate limiting con timeout personalizado
unwaf -l domains.txt --json -o results.json
Procesamiento por lotes con salida JSON a archivo
unwaf -q -d target.com | nuclei -l -
Encadenar con nuclei para testing automatizado
unwaf -q -d target.com | httpx -silent
Encadenar con httpx para sondeo
unwaf -d target.com --json | jq '.bypasses[].ip'
Extraer IPs de la salida JSON con jq
Opciones
| Flag | Descripción |
|---|---|
| -d, --domain | Target domain or full URL (required) |
| -l, --list | File with domains, one per line (batch mode) |
| -s, --source | Local HTML file for comparison (optional) |
| -o, --output | Write results to file |
| -c, --config | Config file path (default: $HOME/.unwaf.conf) |
| -t, --threshold | Similarity threshold percentage (default: 60) |
| -w, --workers | Number of concurrent workers (default: 50) |
| --timeout | HTTP timeout in seconds (default: 10) |
| --rate-limit | Max requests per second, 0 = unlimited (default: 0) |
| --proxy | Proxy URL (http:// or socks5://) |
| --scan-neighbors | Scan /24 CIDR neighbors of discovered IPs |
| --json | JSON output format |
| -v, --verbose | Enable verbose output |
| -q, --quiet | Silent mode: only output bypass IPs (for piping/automation) |
| --version | Print version |
| -h, --help | Display help information |