
Ferramenta Go que descobre passivamente o IP de origem real por trás de um WAF/CDN usando múltiplas fontes OSINT, depois verifica os candidatos por meio de similaridade de HTML, impressões digitais de certificados SSL e cabeçalhos HTTP.
Unwaf é uma ferramenta em Go projetada para ajudar a identificar bypasses de WAF usando técnicas passivas. Ela automatiza o processo de descoberta do IP de origem real por trás de um WAF/CDN, combinando múltiplos métodos de descoberta e verificando candidatos por meio de comparação de similaridade de HTML, fingerprinting de certificado SSL e análise de cabeçalhos HTTP.
Unwaf automatiza os passos que expliquei neste Post do LinkedIn: Passive WAF bypassing
Versão atual: 3.0.0 — Consulte CHANGELOG.md para o histórico de versões.
curl.go install github.com/mmarting/unwaf@latest
unwaf -h
Verificar um domínio (apenas métodos gratuitos, sem necessidade de chaves de API):
unwaf -d example.com
Tanto domínios simples quanto URLs completas funcionam:
unwaf -d https://example.com/path
Verificar com um arquivo HTML salvo manualmente (útil quando o WAF bloqueia a ferramenta):
unwaf -d example.com -s original.html
Reduzir o limite de similaridade para capturar correspondências parciais:
unwaf -d example.com -t 40
Aumentar a concorrência para varredura mais rápida:
unwaf -d example.com -w 100
Modo detalhado para ver cada subdomínio/IP resolvido:
unwaf -d example.com -v
Modo silencioso para automação — exibe apenas IPs, um por linha:
unwaf -q -d example.com
Saída JSON para automação:
unwaf -d example.com --json
Modo em lote com lista de domínios:
unwaf -l domains.txt --json -o results.json
Usar um proxy (Tor, Burp, etc.):
unwaf -d example.com --proxy socks5://127.0.0.1:9050
Varrer vizinhos /24 dos IPs de bypass:
unwaf -d example.com --scan-neighbors
Limitar requisições a 2/seg com timeout de 5s:
unwaf -d example.com --rate-limit 2 --timeout 5
# Feed into nuclei
unwaf -q -d target.com | nuclei -l - -t waf-bypass.yaml
# Feed into httpx
unwaf -q -d target.com | httpx -silent
# Batch recon
cat domains.txt | while read d; do unwaf -q -d "$d" | sed "s/^/$d,/"; done > results.csv
# JSON + jq
unwaf -d target.com --json | jq '.bypasses[].ip'
Na primeira execução, o Unwaf cria $HOME/.unwaf.conf com este template:
# Unwaf config file — API keys for optional discovery methods
# Free methods (SPF, MX, crt.sh, subdomains, OTX, RapidDNS, HackerTarget, Wayback) work without any keys.
# ViewDNS.info — DNS history (250 free requests, no credit card required)
viewdns=""
# SecurityTrails — DNS history (https://securitytrails.com/corp/api)
securitytrails=""
# Censys — SSL certificate search (requires a PAID license)
censys_token=""
censys_org_id=""
# AlienVault OTX — passive DNS (optional, raises rate limits)
otx_api_key=""
# Shodan — host search by SSL cert, hostname, favicon hash
shodan_api_key=""
# DNSDB/Farsight — historical DNS records (Community Edition: 500 queries/month free)
dnsdb_api_key=""
Martín Martín
Distribuído sob a Licença GPL v3.
| Método | Tipo | Descrição |
|---|
| Registros SPF | Gratuito | Extrai IPs dos mecanismos SPF ip4:/ip6: |
| Registros MX | Gratuito | Resolve hostnames de servidores de e-mail (ignora Google/Microsoft/etc.) |
| Sondagem de subdomínios | Gratuito | Resolve mais de 30 subdomínios comuns (mail, dev, staging, cpanel, origin, etc.) |
| Certificate Transparency | Gratuito | Consulta o crt.sh para todos os subdomínios, resolve para IPs não-WAF |
| AlienVault OTX | Gratuito | Registros de DNS passivo (chave de API opcional aumenta os limites de requisições) |
| RapidDNS | Gratuito | Enumeração de subdomínios via scraping de HTML |
| HackerTarget | Gratuito | API de busca de hosts (50 req/dia) |
| Wayback Machine | Gratuito | Extrai hostnames de URLs arquivadas via API CDX |
| Detecção de WAF | Gratuito | Faz fingerprinting do fornecedor do WAF via cabeçalhos HTTP |
| Hashing de favicon | Gratuito | Gera hashes MD5, SHA256 e MMH3 para busca no Shodan/Censys |
| Busca de hosts no Shodan | API (nível gratuito) | Busca por CN do certificado SSL, hostname e hash de favicon (a busca requer assinatura) |
| Histórico do SecurityTrails | API (nível gratuito) | Registros A de DNS históricos (50 req/mês grátis) |
| Histórico do ViewDNS | API (nível gratuito) | Registros A de DNS históricos (250 requisições grátis) |
| Busca SSL no Censys | API (paga) | Encontra hosts que apresentam certificados SSL correspondentes ao domínio |
| DNSDB/Farsight | API (nível gratuito) | Registros DNS históricos via API NDJSON (Community Edition: 500 consultas/mês) |
| Método | Peso | Descrição |
|---|
| Similaridade de HTML | 60% | Comparação de texto baseada em diff com a página de referência |
| Certificado SSL | 25% | Número de série (50%), correspondência de CN (25%), sobreposição de SAN (25%) |
| Cabeçalhos HTTP | 15% | Comparação de Server, X-Powered-By e nome de Set-Cookie |
| Código de status | ±5-20% | Bônus por correspondência, penalidade por divergência de sucesso/erro |
| Flag | Flag Longa | Descrição | Padrão |
|---|
-d | --domain | O domínio a verificar | (obrigatório a menos que -l) |
-s | --source | Arquivo HTML de origem para comparar | — |
-c | --config | Caminho do arquivo de configuração | $HOME/.unwaf.conf |
-t | --threshold | Percentual de limite de similaridade | 60 |
-w | --workers | Número de workers concorrentes | 50 |
-v | --verbose | Habilita saída detalhada | false |
-q | --quiet | Modo silencioso: exibe apenas IPs de bypass | false |
--timeout | Timeout HTTP em segundos | 10 | |
--rate-limit | Máximo de requisições HTTP por segundo, 0=ilimitado | 0 | |
--proxy | URL do proxy (http:// ou socks5://) | — | |
--scan-neighbors | Varre vizinhos /24 dos IPs de bypass confirmados | false | |
--json | Exibe resultados como JSON | false | |
-l | --list | Arquivo contendo domínios a verificar, um por linha | — |
-o | --output | Escreve os resultados em arquivo | — |
--version | Exibe a versão e sai | — | |
-h | --help | Exibe informações de ajuda | — |