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, 加密, 子域名接管, 实时处理, 异步扫描, 无后门, 漏洞扫描器, 逆向工具