
Outil Go qui découvre passivement la véritable IP d'origine derrière un WAF/CDN en utilisant plusieurs sources OSINT, puis vérifie les candidats via la similarité HTML, les empreintes de certificats SSL et les en-têtes HTTP.
Unwaf est un outil Go conçu pour aider à identifier les contournements de WAF en utilisant des techniques passives. Il automatise le processus de découverte de l'IP d'origine réelle derrière un WAF/CDN en combinant plusieurs méthodes de découverte et en vérifiant les candidats via une comparaison de similarité HTML, l'empreinte de certificat SSL et l'analyse des en-têtes HTTP.
Unwaf automatise les étapes que j'ai expliquées dans ce post LinkedIn : Passive WAF bypassing
Version actuelle : 3.0.0 — Voir CHANGELOG.md pour l'historique des versions.
curl.go install github.com/mmarting/unwaf@latest
unwaf -h
Vérifier un domaine (méthodes gratuites uniquement, aucune clé API nécessaire) :
unwaf -d example.com
Les domaines nus et les URL complètes fonctionnent :
unwaf -d https://example.com/path
Vérifier avec un fichier HTML sauvegardé manuellement (utile lorsque le WAF bloque l'outil) :
unwaf -d example.com -s original.html
Abaisser le seuil de similarité pour détecter les correspondances partielles :
unwaf -d example.com -t 40
Augmenter la concurrence pour un scan plus rapide :
unwaf -d example.com -w 100
Mode verbeux pour voir chaque sous-domaine/IP résolu :
unwaf -d example.com -v
Mode silencieux pour l'automatisation — affiche uniquement les IP, une par ligne :
unwaf -q -d example.com
Sortie JSON pour l'automatisation :
unwaf -d example.com --json
Mode batch avec une liste de domaines :
unwaf -l domains.txt --json -o results.json
Utiliser un proxy (Tor, Burp, etc.) :
unwaf -d example.com --proxy socks5://127.0.0.1:9050
Scanner les voisins /24 des IP de contournement :
unwaf -d example.com --scan-neighbors
Limiter les requêtes à 2/sec avec un délai d'expiration de 5s :
unwaf -d example.com --rate-limit 2 --timeout 5
# Alimenter nuclei
unwaf -q -d target.com | nuclei -l - -t waf-bypass.yaml
# Alimenter httpx
unwaf -q -d target.com | httpx -silent
# Recon en batch
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'
Au premier lancement, Unwaf crée $HOME/.unwaf.conf avec ce modèle :
# 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é sous la licence GPL v3.
| Méthode | Type | Description |
|---|
| Enregistrements SPF | Gratuit | Extrait les IP des mécanismes SPF ip4:/ip6: |
| Enregistrements MX | Gratuit | Résout les noms d'hôtes des serveurs mail (ignore Google/Microsoft/etc.) |
| Sondage de sous-domaines | Gratuit | Résout plus de 30 sous-domaines courants (mail, dev, staging, cpanel, origin, etc.) |
| Certificate Transparency | Gratuit | Interroge crt.sh pour tous les sous-domaines, résout vers des IP non-WAF |
| AlienVault OTX | Gratuit | Enregistrements DNS passifs (une clé API optionnelle augmente les limites de débit) |
| RapidDNS | Gratuit | Énumération de sous-domaines via scraping HTML |
| HackerTarget | Gratuit | API de recherche d'hôtes (50 req/jour) |
| Wayback Machine | Gratuit | Extrait les noms d'hôtes des URL archivées via l'API CDX |
| Détection de WAF | Gratuit | Effectue l'empreinte du fournisseur WAF via les en-têtes HTTP |
| Hachage de favicon | Gratuit | Génère les hachages MD5, SHA256 et MMH3 pour la recherche Shodan/Censys |
| Recherche d'hôte Shodan | API (offre gratuite) | Recherche par CN de certificat SSL, nom d'hôte et hachage de favicon (la recherche nécessite un abonnement) |
| Historique SecurityTrails | API (offre gratuite) | Enregistrements DNS A historiques (50 req/mois gratuites) |
| Historique ViewDNS | API (offre gratuite) | Enregistrements DNS A historiques (250 requêtes gratuites) |
| Recherche SSL Censys | API (payante) | Trouve les hôtes présentant des certificats SSL correspondant au domaine |
| DNSDB/Farsight | API (offre gratuite) | Enregistrements DNS historiques via l'API NDJSON (Community Edition : 500 requêtes/mois) |
| Méthode | Poids | Description |
|---|
| Similarité HTML | 60 % | Comparaison de texte basée sur les différences avec la page de référence |
| Certificat SSL | 25 % | Numéro de série (50 %), correspondance CN (25 %), chevauchement SAN (25 %) |
| En-têtes HTTP | 15 % | Comparaison de Server, X-Powered-By et du nom Set-Cookie |
| Code de statut | ±5-20 % | Bonus en cas de correspondance, pénalité en cas d'incohérence succès/erreur |
| Flag | Flag long | Description | Défaut |
|---|
-d | --domain | Le domaine à vérifier | (requis sauf avec -l) |
-s | --source | Fichier HTML source à comparer | — |
-c | --config | Chemin du fichier de configuration | $HOME/.unwaf.conf |
-t | --threshold | Pourcentage de seuil de similarité | 60 |
-w | --workers | Nombre de workers concurrents | 50 |
-v | --verbose | Active la sortie verbeuse | false |
-q | --quiet | Mode silencieux : affiche uniquement les IP de contournement | false |
--timeout | Délai d'expiration HTTP en secondes | 10 | |
--rate-limit | Nombre max de requêtes HTTP par seconde, 0=illimité | 0 | |
--proxy | URL du proxy (http:// ou socks5://) | — | |
--scan-neighbors | Scanne les voisins /24 des IP de contournement confirmées | false | |
--json | Affiche les résultats au format JSON | false | |
-l | --list | Fichier contenant les domaines à vérifier, un par ligne | — |
-o | --output | Écrit les résultats dans un fichier | — |
--version | Affiche la version et quitte | — | |
-h | --help | Affiche les informations d'aide | — |