verygoodsecbadsec/cdnunmasker

GitHub: verygoodsecbadsec/cdnunmasker

一款通过九种侦察技术交叉验证并加权评分,揭示隐藏在 CDN 背后的真实源站 IP 的自动化侦察脚本。

Stars: 0 | Forks: 0

# CDN-Unmasker 大多数现代目标都隐藏在 Cloudflare、Akamai、Fastly 或 AWS CloudFront 背后。当你扫描它们时,你扫描的是 CDN 边缘节点——而不是实际的服务器。CDN-Unmasker 串联了九种侦察技术,过滤掉 CDN 地址空间,并根据有多少独立信号指向该候选 IP 来对其进行评分。 ``` $ ./cdn_unmasker.sh example.com --report --nmap [*] CDN Unmasking v3.4 for example.com [*] Output: recon_example.com_20240812_143022 [+] CDN ranges saved (312 entries). [+] 847 passive subdomains collected. [+] 23 subdomains from DNS brute-force. [+] 4 vhosts discovered. [+] Historical IPs: 185.220.101.47 37.48.89.12 [+] Candidate origin IPs (weighted): 185.220.101.47 7 historical_dns,ssl_san,spf,asn_mismatch 37.48.89.12 3 historical_dns,asn_mismatch [+] All data in recon_example.com_20240812_143022 ``` ## 工作原理 CDN-Unmasker 按顺序运行九个阶段,每个阶段的结果都会输入到最终的评分环节。 | 阶段 | 技术 | 工具 | |-------|-----------|-------| | 1 | 被动子域名枚举 | `subfinder`、`assetfinder`、`crt.sh` | | 2 | 主动 DNS 暴力破解 | `ffuf` + SecLists 11万词表 | | 3 | 虚拟主机暴力破解 | `gobuster` vhost 模式 | | 4 | Whois 查询 | `whois`(并行,限速) | | 5 | DNS 解析 (A/AAAA/CNAME) | `dig`(并行) | | 6 | 历史 DNS 记录 | HackerTarget API + crt.sh 时间线 | | 7 | SSL 证书检查 | `openssl` — SAN IP 提取 | | 8 | CDN 绕过自动检查 | `cloudrip.py` | | 9 | 证据汇总与评分 | `grepcidr` + 加权评分 | 所有已解析的 IP 都会与实时汇总的 CDN 范围列表(Cloudflare、Akamai、Fastly、AWS CloudFront、Azure)进行比对过滤。剩下的 IP 将根据指向它的独立证据源数量进行评分。 ## 评分系统 每个候选 IP 都会根据识别出它的信号获得一个加权分数。分数越高 = 它是真实源站 IP 的置信度越高。 | 来源 | 权重 | 理由 | |--------|--------|-----------| | `historical_dns` | **3** | 最强信号。历史 A 记录反映了服务器在采用 CDN *之前*所在的位置——该 IP 大概率没有改变。 | | `ssl_san` | **2** | SSL 主题备用名称(SAN)属于基础设施记录。开发人员在迁移到 CDN 背后时经常忘记更新它们,从而泄露了真实的 IP。 | | `spf` | **2** | SPF 记录经常暴露同一基础设施上的邮件服务器 IP。邮件很少通过 CDN 路由。 | | `asn_mismatch` | **1** | 弱信号。解析到非 CDN ASN 的 IP 虽然可疑,但小型托管商可能会在此处产生误报。 | | `passive_subdomain` | **1** | 直接解析并绕过 CDN 的子域名。这在预发布环境和内部服务中很常见。 | 输出示例: ``` IP Score Sources 185.220.101.47 7 historical_dns,ssl_san,spf,asn_mismatch 37.48.89.12 3 historical_dns,asn_mismatch 203.0.113.42 2 ssl_san ``` 在多个独立来源中获得 5+ 分的 IP 是高置信度的源站候选者。如果 IP 仅仅因为 ASN 不匹配而得 1 分,则在采取进一步行动之前需要进行验证。 ## 安装说明 ### 1. 克隆仓库 ``` git clone https://github.com/verygoosecbadsec/cdnunmasker.git cd cdn-unmasker ``` ### 2. 安装依赖 **Go 工具:** ``` go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest go install github.com/tomnomnom/assetfinder@latest go install github.com/projectdiscovery/httpx/cmd/httpx@latest go install github.com/ffuf/ffuf/v2@latest go install github.com/OJ/gobuster/v3@latest ``` **系统工具:** ``` # Debian / Ubuntu sudo apt install jq whois dnsutils openssl grepcidr nmap curl python3 **CloudRip:** ```bash git clone https://github.com/staxsum/CloudRip.git cp CloudRip/cloudrip.py . ``` ### 3. 下载词表 ``` wget https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/DNS/subdomains-top1million-110000.txt ``` ### 4. 验证安装 ``` chmod +x cdn_unmasker.sh ./cdn_unmasker.sh --help ``` ## 使用说明 ``` ./cdn_unmasker.sh [--report] [--nmap] ``` | 标志 | 描述 | |------|-------------| | `--report` | 在输出目录中生成包含完整发现表格的 `REPORT.md` | | `--nmap` | 分析后对评分排名前 5 的候选者运行 `nmap -sV` | **基本扫描:** ``` ./cdn_unmasker.sh example.com ``` **带报告和服务检测的全面扫描:** ``` ./cdn_unmasker.sh example.com --report --nmap ``` **自定义词表或 cloudrip 路径:** ``` WORDLIST=/path/to/wordlist.txt CLOUDRIP_SCRIPT=/opt/cloudrip.py ./cdn_unmasker.sh example.com ``` ## 输出结构 每次运行都会创建一个带时间戳的目录: ``` recon_example.com_YYYYMMDD_HHMMSS/ ├── cdn_ranges.txt # Aggregated CDN CIDR ranges used for filtering ├── passive_subs.txt # Subdomains from subfinder + assetfinder + crt.sh ├── bruteforce_subs.txt # Subdomains from ffuf DNS brute-force ├── vhosts.txt # Virtual hosts from gobuster ├── all_discovered.txt # Deduplicated union of all above ├── current_ips.txt # All IPs resolved from DNS records ├── possible_origin_ips_raw.txt # Non-CDN IPs (post grepcidr filter) ├── possible_origin_ips_scored.txt # Final candidates with weighted scores ← key file ├── all_candidates.txt # All IPs fed into ASN analysis ├── spf_cidrs.txt # SPF CIDRs extracted from DNS TXT records ├── asn_work.txt # Raw ASN lookup results ├── whois/ # Per-host whois output ├── dns/ # Per-host A, AAAA, CNAME records ├── ssl/ # Per-host SSL certificate text dumps ├── historical/ │ ├── historical_example.com_ips.txt # Historical IPs from HackerTarget │ └── crtsh_timeline.txt # Certificate issuance timeline ├── cloudrip_results.txt # CloudRip findings └── REPORT.md # Markdown report (if --report was used) ``` ## API 限制与外部服务 | 服务 | 限制 | 备注 | |---------|-------|-------| | HackerTarget | 50 次查询/天(免费) | 用于历史 DNS。可设置 `ST_API_KEY` 以使用 SecurityTrails 作为替代方案。 | | crt.sh | 无硬性限制 | 高负载下可能会变慢。结果缓存在 `crtsh.txt` 中。 | | Team Cymru whois | 限速 | 脚本使用 `-P 3` 并在查询之间设置 0.5 秒的延迟,以保持在合理使用范围内。 | | Cloudflare / Fastly / AWS | 无限制 | 每次运行时都会重新获取 IP 范围文件。 | **Azure CDN 范围**作为静态列表包含在内。Microsoft 每周在 `aka.ms/azureipranges` 发布更新的范围——请定期更新 `aggregate_cdn_ranges()` 中的 heredoc 以确保准确性。 ## 已知限制 - **双向 TLS 和证书固定**将阻止对某些目标进行 SSL SAN 提取。 - **SPF 扩展**涵盖了一级 `include:` 指令。深度嵌套的 SPF 链(例如 `include: → include: → ip4:`)将无法被完全解析。 - **ASN 不匹配**会对托管在小型或地区性提供商(其 ASN 不在 `KNOWN_CDN_ASNS` 中)上的目标产生误报。请将得分为 1 的候选者视为线索,而非最终结论。 - **CloudRip** 依赖于外部维护的工具。如果其标志接口发生变化,第 8 阶段可能会静默失败(会被阶段跟踪机制捕获)。 - 本脚本仅适用于**授权的渗透测试**。对你没有测试权限的目标运行本工具是非法的。 ## 法律声明 本工具仅用于 CTF 竞赛、安全研究和受控测试环境中的授权操作。在大多数司法管辖区,在你不拥有或未获得明确授权监控的网络上抓取流量是非法的。作者对未经授权的使用不承担任何责任。 ## 许可证 - 本项目基于 MIT 许可证授权——有关详细信息,请参见 [LICENSE](LICENSE) 文件。
标签:Akamai, ASN交叉验证, AWS CloudFront, CDN溯源, Cloudflare, DNS历史记录, DNS解析, GitHub, IP发现, MITRE ATT&CK, SPF记录检查, SSL证书解析, Whois查询, 主动侦察, 子域名爆破, 安全工具库, 应用安全, 开源项目, 插件系统, 数据展示, 日志审计, 目标定位, 真实IP获取, 红队, 绕过CDN, 网络安全, 被动侦察, 资产测绘, 逆向工具, 隐私保护, 黑帽SEO