rendidwisa/subreaper

GitHub: rendidwisa/subreaper

面向 Bug Bounty 与渗透测试的高精度子域名接管及 DNS 漏洞异步扫描器。

Stars: 2 | Forks: 0

# SubReaper — 子域名接管与漏洞扫描器 一个用于检测**子域名接管**和**DNS 漏洞**的扫描器。 专为 Bug Bounty 猎手和渗透测试人员打造,采用**专注于精准度的检测**设计。 ## 核心功能 - **子域名接管检测** – 悬挂 CNAME、NS 接管以及未认领的提供商账户(支持 20+ 种服务) - **高准确性验证** – HTTP body 指纹匹配结合基于场景的评分机制 - **IP 情报** – 通过 MaxMind GeoLite2(离线)或 DNS 回退(在线)获取源 IP 解析结果,包含 ASN、组织、国家、城市和坐标信息 - **WAF 与 SNI 绕过** – 自动处理受 Cloudflare 保护的服务以及 Vercel SNI 不匹配问题 - **并发扫描** – 支持可配置并发的高速异步扫描 - **专业报告** – 彩色终端输出、详细的 DNS 信息以及 JSON 导出 - **专注于精准度的检测** – 采用多解析器共识、泛解析保护和负向信号过滤,最大限度减少误报 - **邮件安全检查** – 检测 SPF、DMARC 和 DKIM 配置错误 - **陈旧 DNS 检测** – 识别僵尸 A 记录、MX 记录以及悬挂的 TXT 验证记录 - **CORS 配置错误检测** – 将 CORS 漏洞与存在漏洞或悬挂的子域名进行组合利用 - **DNSSEC 分析** – 检查 DNSSEC 配置错误、NSEC zone walking,并尝试 AXFR zone transfer - **Sinkhole 与劫持检测** – 检测 DNS sinkhole 并探测是否存在默认凭据劫持 ## 安装说明 ``` # Clone 仓库 git clone https://github.com/rendidwisa/subreaper.git cd subreaper # 使用 pip 安装 pip install . # 如果环境出错 python3 -m venv subreaper source subreaper/bin/activate pip install . ``` 安装完成后,`subreaper` 命令将在全局可用。 ## 基本用法 ### 扫描单个子域名 ``` subreaper -d sub.example.com ``` ### 从包含子域名的文件中扫描 ``` subreaper -f subs.txt ``` ### 将结果保存为 JSON ``` subreaper -f subs.txt -o results.json ``` ### Verbose 模式(显示所有域名,包括状态正常的域名) ``` subreaper -f subs.txt -v ``` ### 调整并发与超时 ``` subreaper -f subs.txt -c 30 -t 15 ``` ## 高级功能 ### 幽灵服务检测 (-g) 幽灵服务是指仍然存在但显示通用错误页面(指示资源缺失,例如 Heroku 的 "No such app")的 CNAME 目标。简单的 DNS 检查通常会遗漏它们,因为这些域名可以成功解析。 ``` subreaper -f subs.txt -g ``` ### WAF 绕过面探测 (-i) 许多域名隐藏在 CDN / WAF 背后。SubReaper 会尝试找到直接提供应用程序服务的源 IP。它会识别 WAF 提供商(Cloudflare、CloudFront、Fastly 等),收集所有 IP,过滤掉属于该 WAF 的 IP,并呈现候选的源 IP。 ``` subreaper -f subs.txt -i ``` ### 源 IP 验证 (-Vo) 为了减少误报,可添加 -Vo 对每个候选 IP 发起带有原始 Host header 的直接 HTTP 请求。只有响应实际内容(且无 CDN 信号)的 IP 才会被标记为 BYPASSABLE。如果不进行验证,那些仍位于 CDN 背后的 IP(例如在 body 中返回 "CloudFront" 的 IP)可能会被作为候选项显示出来。 ``` subreaper -f subs.txt -i -Vo ``` ### 邮件安全检查 (-E) 检测常见的邮件安全配置错误: - 缺失或过于宽松的 SPF 记录 (+all) - 缺失的 DMARC 策略 (p=none 或不存在) - 无效或缺失的 DKIM selector ``` subreaper -d domain.com -E ``` ### 陈旧 DNS 检测 (-St) 查找指向已过期资源的悬挂 DNS 记录: - 指向无法解析的 IP 或已失效服务的僵尸 A 记录 - 指向已废弃邮件服务器的 MX 记录 - 服务删除后遗留的 TXT 验证记录(Google、Microsoft 等) ``` subreaper -f subs.txt -St ``` ### CORS 配置错误组合利用 (-Co) 检测可以与存在漏洞或悬挂的子域名进行组合利用以窃取数据的 CORS 配置错误。需要输入文件 (-f)。 ``` subreaper -f subs.txt -Co ``` ### DNSSEC 与 Zone Transfer (-Ds) 检查削弱域名完整性的 DNSSEC 配置错误,尝试通过 NSEC zone walking 枚举所有 zone 记录,并探测开放的 AXFR zone transfer。 ``` subreaper -d domain.com -Ds ``` ### Sinkhole 检测 (-Sk) 识别域名能够解析但指向默认或占位服务(如停放页面、广告陷阱等)的 DNS sinkhole。可选择使用已知的默认凭据尝试服务劫持。 ``` subreaper -f sinkhole_targets.txt -Sk ``` ### 激进模式 (-A) 与 sinkhole 检测 (-Sk) 结合使用时,该模式会探测解析出的 IP 上的开放端口,并尝试在常见服务(SSH、FTP、HTTP basic auth)上进行默认凭据登录。 ``` subreaper -f sinkhole_targets.txt -Sk -A ``` ### 通过管道接收其他工具的输入(例如 subfinder) ``` subfinder -d target.com -silent | subreaper -f /dev/stdin -i -g -o result.json ``` ## 更新数据 ### IP 情报(ASN 与 GeoIP) SubReaper 会自动解析每个 CNAME 目标的源 IP,并且如果 存在可选的 MaxMind GeoLite2 数据库,它将为每份报告补充以下信息: * **ASN**(自治系统编号)和组织名称 * **国家**、**城市**以及大致的**坐标** 这些额外数据有助于验证解析出的 IP 是否确实属于 所声称的提供商(例如 Heroku 对应 `AS16509 Amazon`),从而使 Bug Bounty 报告更具可信度。 如果没有数据库,SubReaper 仍然可以通过注重隐私的 DNS 回退方式提供 ASN 和国家信息, 但城市级别的详细信息需要下载数据库。 ### 获取 GeoLite2 数据库 1. 在 创建一个免费的 MaxMind 账户 2. 登录后,前往 并复制您的 license key。 3. 运行集成的设置向导: ``` subreaper -S ``` ### 更新 WAF IP 范围 (-U) CDN 提供商会频繁更改其 IP 范围。定期运行 -U 以从官方源(CloudFront、Cloudflare、Fastly)下载最新的 IP 前缀。更新后的数据将存储在 ~/.subreaper/waf_ranges.json 中,并在随后的扫描中自动使用。 ``` subreaper -U ``` 您也可以在扫描任务开始前运行它,以确保获得最准确的结果。 ## 完整选项 | 选项 | 简写 | 描述 | | ------------------ | ----- | ----------------------------------------------------------------| | `--domain` | `-d` | 要扫描的单个域名/子域名 | | `--file` | `-f` | 每行包含一个域名的文件(管道输入请使用 `/dev/stdin`) | | `--output` | `-o` | 将结果保存为 JSON 文件 | | `--concurrency` | `-c` | 并行 worker 数量(默认:20) | | `--timeout` | `-t` | DNS 和 HTTP 超时时间(秒,默认:10) | | `--nameservers` | `-n` | 自定义 DNS 服务器,以逗号分隔 | | `--verbose` | `-v` | 显示每个域名的状态(包括 CLEAN/NXDOMAIN) | | `--setup-geoip` | `-S` | 下载 MaxMind GeoLite2 数据库以增强 IP 信息 | | `--ghost` | `-g` | 检测幽灵服务 = 返回了无关内容的存活 CNAME 目标 | | `--origin` | `-i` | 通过暴露的源 IP 检测 WAF 绕过 | | `--validate-origin`| `-Vo` | 通过直接 HTTP 探测验证潜在的源 IP | | `--update-waf-db` | `-U` | 从官方源下载最新的 WAF/CDN IP 范围 | | `--email-security` | `-E` | 检查 SPF、DMARC 和 DKIM 配置错误 | | `--stale-dns` | `-St` | 检测陈旧的 DNS 记录(僵尸 A、MX、TXT 验证记录) | | `--cors-chain` | `-Co` | 将 CORS 配置错误与悬挂/存在漏洞的子域名进行组合利用(需要 -f) | | `--dnssec` | `-Ds` | 检查 DNSSEC 配置错误、NSEC walking,并尝试 AXFR | | `--sinkhole` | `-Sk` | 检测 DNS sinkhole 并尝试使用默认凭据进行服务劫持 | | `--aggressive` | `-A` | 探测端口并尝试在 sinkhole 上进行默认登录(需要 -Sk) | ## 环境要求 Python 3.9 或更高版本 依赖项(通过 `pip install .` 自动安装): * aiohttp * dnspython * colorama * geoip ## 贡献指南 欢迎提交 Pull request。请阅读 `CONTRIBUTING.md` 了解有关添加指纹、运行测试和报告 bug 的指南。 ## License MIT — 可免费用于渗透测试、安全研究和 Bug Bounty。
标签:DNS安全, Python, 加密, 子域名接管, 实时处理, 异步扫描, 无后门, 漏洞扫描器, 逆向工具