
WAF/CDNの背後にある実際のオリジンIPを、複数のOSINTソースを用いてパッシブに発見し、HTML類似度、SSL証明書フィンガープリント、HTTPヘッダーによって候補を検証するGoツールです。
Unwafは、パッシブテクニックを用いてWAFバイパスの特定を支援するために設計されたGoツールです。複数の発見手法を組み合わせ、HTML類似度比較、SSL証明書フィンガープリント、HTTPヘッダー分析を通じて候補を検証することで、WAF/CDN背後にある実際のオリジンIPを発見するプロセスを自動化します。
Unwafは、こちらのLinkedIn投稿で説明した手順を自動化するものです: Passive WAF bypassing
現在のバージョン: 3.0.0 — バージョン履歴についてはCHANGELOG.mdを参照してください。
curl検証コマンドとともに報告します。go install github.com/mmarting/unwaf@latest
unwaf -h
ドメインをチェック(無料手法のみ、APIキー不要):
unwaf -d example.com
ベアドメインと完全なURLの両方が機能します:
unwaf -d https://example.com/path
手動で保存したHTMLファイルでチェック(WAFがツールをブロックする場合に便利):
unwaf -d example.com -s original.html
部分一致を捕捉するために類似度しきい値を下げる:
unwaf -d example.com -t 40
スキャンを高速化するために並行数を増やす:
unwaf -d example.com -w 100
解決されたすべてのサブドメイン/IPを確認する詳細モード:
unwaf -d example.com -v
自動化向けのサイレントモード — IPのみを1行に1つ出力:
unwaf -q -d example.com
自動化向けのJSON出力:
unwaf -d example.com --json
ドメインリストによるバッチモード:
unwaf -l domains.txt --json -o results.json
プロキシを使用(Tor、Burpなど):
unwaf -d example.com --proxy socks5://127.0.0.1:9050
バイパスIPの/24隣接ホストをスキャン:
unwaf -d example.com --scan-neighbors
リクエストを2/秒にレート制限し、タイムアウトを5秒に設定:
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'
初回実行時、Unwafは$HOME/.unwaf.confをこのテンプレートで作成します:
# 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
GPL v3 Licenseの下で配布されています。
| 手法 | 種類 | 説明 |
|---|
| SPFレコード | 無料 | ip4:/ip6: SPFメカニズムからIPを抽出 |
| MXレコード | 無料 | メールサーバーホスト名を解決(Google/Microsoftなどはスキップ) |
| サブドメインプロービング | 無料 | 30以上の一般的なサブドメイン(mail、dev、staging、cpanel、originなど)を解決 |
| Certificate Transparency | 無料 | crt.shにすべてのサブドメインを問い合わせ、非WAF IPに解決 |
| AlienVault OTX | 無料 | パッシブDNSレコード(オプションのAPIキーでレート制限が緩和) |
| RapidDNS | 無料 | HTMLスクレイピングによるサブドメイン列挙 |
| HackerTarget | 無料 | ホスト検索API(1日50リクエスト) |
| Wayback Machine | 無料 | CDX API経由でアーカイブされたURLからホスト名を抽出 |
| WAF検出 | 無料 | HTTPヘッダーでWAFベンダーをフィンガープリント |
| Faviconハッシュ | 無料 | Shodan/Censys検索用のMD5、SHA256、MMH3ハッシュを生成 |
| Shodanホスト検索 | API(無料枠) | SSL証明書CN、ホスト名、faviconハッシュで検索(検索にはメンバーシップが必要) |
| SecurityTrails履歴 | API(無料枠) | 過去のDNS Aレコード(無料で月50リクエスト) |
| ViewDNS履歴 | API(無料枠) | 過去のDNS Aレコード(無料で250リクエスト) |
| Censys SSL検索 | API(有料) | ドメインに一致するSSL証明書を提示するホストを検索 |
| DNSDB/Farsight | API(無料枠) | NDJSON API経由の過去のDNSレコード(Community Edition: 月500クエリ) |
| 手法 | 重み | 説明 |
|---|
| HTML類似度 | 60% | 参照ページとの差分ベースのテキスト比較 |
| SSL証明書 | 25% | シリアル番号(50%)、CN一致(25%)、SAN重複(25%) |
| HTTPヘッダー | 15% | Server、X-Powered-By、Set-Cookie名の比較 |
| ステータスコード | ±5-20% | 一致でボーナス、成功/エラーの不一致でペナルティ |
| フラグ | ロングフラグ | 説明 | デフォルト |
|---|
-d | --domain | チェックするドメイン | (-lがない場合は必須) |
-s | --source | 比較するソースHTMLファイル | — |
-c | --config | 設定ファイルのパス | $HOME/.unwaf.conf |
-t | --threshold | 類似度しきい値のパーセンテージ | 60 |
-w | --workers | 同時ワーカー数 | 50 |
-v | --verbose | 詳細出力を有効化 | false |
-q | --quiet | サイレントモード: バイパスIPのみを出力 | false |
--timeout | HTTPタイムアウト(秒) | 10 | |
--rate-limit | 1秒あたりの最大HTTPリクエスト数、0=無制限 | 0 | |
--proxy | プロキシURL(http://またはsocks5://) | — | |
--scan-neighbors | 確認されたバイパスIPの/24隣接ホストをスキャン | false | |
--json | 結果をJSONで出力 | false | |
-l | --list | チェックするドメインを含むファイル、1行に1つ | — |
-o | --output | 結果をファイルに書き込む | — |
--version | バージョンを表示して終了 | — | |
-h | --help | ヘルプ情報を表示 | — |