
Strumento Go che scopre passivamente l'IP di origine reale dietro un WAF/CDN utilizzando molteplici fonti OSINT, quindi verifica i candidati tramite similarità HTML, fingerprint dei certificati SSL e header HTTP.
Unwaf è uno strumento Go progettato per aiutare a identificare bypass dei WAF utilizzando tecniche passive. Automatizza il processo di scoperta dell'IP di origine reale dietro un WAF/CDN combinando molteplici metodi di discovery e verificando i candidati tramite confronto di similarità HTML, fingerprinting dei certificati SSL e analisi degli header HTTP.
Unwaf automatizza i passaggi che ho spiegato in questo post su LinkedIn: Passive WAF bypassing
Versione attuale: 3.0.0 — Vedi CHANGELOG.md per la cronologia delle versioni.
curl.go install github.com/mmarting/unwaf@latest
unwaf -h
Verifica un dominio (solo metodi gratuiti, nessuna API key necessaria):
unwaf -d example.com
Funzionano sia i domini nudi che gli URL completi:
unwaf -d https://example.com/path
Verifica con un file HTML salvato manualmente (utile quando il WAF blocca lo strumento):
unwaf -d example.com -s original.html
Abbassa la soglia di similarità per catturare corrispondenze parziali:
unwaf -d example.com -t 40
Aumenta la concorrenza per una scansione più veloce:
unwaf -d example.com -w 100
Modalità dettagliata per vedere ogni sottodominio/IP risolto:
unwaf -d example.com -v
Modalità silenziosa per l'automazione — restituisce solo IP, uno per riga:
unwaf -q -d example.com
Output JSON per l'automazione:
unwaf -d example.com --json
Modalità batch con lista di domini:
unwaf -l domains.txt --json -o results.json
Usa un proxy (Tor, Burp, ecc.):
unwaf -d example.com --proxy socks5://127.0.0.1:9050
Scansiona i neighbor /24 degli IP di bypass:
unwaf -d example.com --scan-neighbors
Limita le richieste a 2/sec con un timeout di 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'
Al primo avvio, Unwaf crea $HOME/.unwaf.conf con questo 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
Distribuito sotto la Licenza GPL v3.
| Metodo | Tipo | Descrizione |
|---|
| Record SPF | Gratuito | Estrae IP dai meccanismi SPF ip4:/ip6: |
| Record MX | Gratuito | Risolve gli hostname dei mail server (salta Google/Microsoft/ecc.) |
| Probing dei sottodomini | Gratuito | Risolve oltre 30 sottodomini comuni (mail, dev, staging, cpanel, origin, ecc.) |
| Certificate Transparency | Gratuito | Interroga crt.sh per tutti i sottodomini, risolve verso IP non-WAF |
| AlienVault OTX | Gratuito | Record DNS passivi (una API key opzionale aumenta i rate limit) |
| RapidDNS | Gratuito | Enumerazione dei sottodomini tramite scraping HTML |
| HackerTarget | Gratuito | API di ricerca host (50 req/giorno) |
| Wayback Machine | Gratuito | Estrae hostname dagli URL archiviati tramite CDX API |
| Rilevamento WAF | Gratuito | Esegue il fingerprinting del vendor WAF tramite header HTTP |
| Hashing del favicon | Gratuito | Genera hash MD5, SHA256 e MMH3 per la ricerca su Shodan/Censys |
| Ricerca host Shodan | API (piano gratuito) | Cerca per CN del certificato SSL, hostname e hash del favicon (la ricerca richiede l'iscrizione) |
| Storico SecurityTrails | API (piano gratuito) | Record DNS A storici (50 req/mese gratis) |
| Storico ViewDNS | API (piano gratuito) | Record DNS A storici (250 richieste gratuite) |
| Ricerca SSL Censys | API (a pagamento) | Trova host che presentano certificati SSL corrispondenti al dominio |
| DNSDB/Farsight | API (piano gratuito) | Record DNS storici tramite API NDJSON (Community Edition: 500 query/mese) |
| Metodo | Peso | Descrizione |
|---|
| Similarità HTML | 60% | Confronto testuale basato su diff con la pagina di riferimento |
| Certificato SSL | 25% | Numero di serie (50%), corrispondenza CN (25%), sovrapposizione SAN (25%) |
| Header HTTP | 15% | Confronto di Server, X-Powered-By e nome del Set-Cookie |
| Codice di stato | ±5-20% | Bonus per corrispondenza, penalità per mancata corrispondenza success/error |
| Flag | Long Flag | Descrizione | Default |
|---|
-d | --domain | Il dominio da verificare | (obbligatorio a meno che non si usi -l) |
-s | --source | File HTML sorgente da confrontare | — |
-c | --config | Percorso del file di configurazione | $HOME/.unwaf.conf |
-t | --threshold | Percentuale di soglia di similarità | 60 |
-w | --workers | Numero di worker concorrenti | 50 |
-v | --verbose | Abilita output dettagliato | false |
-q | --quiet | Modalità silenziosa: restituisce solo gli IP di bypass | false |
--timeout | Timeout HTTP in secondi | 10 | |
--rate-limit | Numero massimo di richieste HTTP al secondo, 0=illimitato | 0 | |
--proxy | URL del proxy (http:// o socks5://) | — | |
--scan-neighbors | Scansiona i neighbor /24 degli IP di bypass confermati | false | |
--json | Restituisce i risultati in JSON | false | |
-l | --list | File contenente i domini da verificare, uno per riga | — |
-o | --output | Scrive i risultati su file | — |
--version | Stampa la versione ed esce | — | |
-h | --help | Mostra le informazioni di aiuto | — |