
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만 한 줄에 하나씩 출력:
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
5초 타임아웃으로 요청 속도를 초당 2회로 제한:
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 (일일 50회 요청) |
| Wayback Machine | 무료 | CDX API를 통해 아카이브된 URL에서 호스트 이름 추출 |
| WAF 탐지 | 무료 | HTTP 헤더를 통한 WAF 벤더 지문 식별 |
| 파비콘 해싱 | 무료 | Shodan/Censys 검색용 MD5, SHA256, MMH3 해시 생성 |
| Shodan 호스트 검색 | API (무료 티어) | SSL 인증서 CN, 호스트 이름, 파비콘 해시로 검색 (검색은 멤버십 필요) |
| 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% | 참조 페이지와의 diff 기반 텍스트 비교 |
| 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 | 초당 최대 HTTP 요청 수, 0=무제한 | 0 | |
--proxy | 프록시 URL (http:// 또는 socks5://) | — | |
--scan-neighbors | 확인된 우회 IP의 /24 이웃 스캔 | false | |
--json | 결과를 JSON으로 출력 | false | |
-l | --list | 확인할 도메인 목록 파일, 한 줄에 하나씩 | — |
-o | --output | 결과를 파일에 기록 | — |
--version | 버전 출력 후 종료 | — | |
-h | --help | 도움말 정보 표시 | — |