Muhammad-a11-crypto/SubReconX-v3.1
GitHub: Muhammad-a11-crypto/SubReconX-v3.1
SubReconX 是一款将被动 OSINT、主动 DNS 暴力破解、指纹识别与接管检测整合为单一流水线的子域名枚举与攻击面侦察框架。
Stars: 0 | Forks: 0
# SubReconX v3.1
**多源子域名枚举与攻击面侦察框架**




SubReconX 将被动 OSINT、主动 DNS 暴力破解、实时 HTTP/HTTPS 探测以及基于证据的 WAF/CDN/技术指纹识别串联成一个单一的侦察 pipeline,并输出 JSON、CSV 和深色主题的 HTML 报告。
由 **Muhammad Zubair ([@Muhammad-a11-crypto](https://github.com/Muhammad-a11-crypto)) & Menahil Munir** 创建。
## 目录
- [架构](#architecture)
- [功能说明](#what-it-does)
- [安装](#installation)
- [使用方法](#usage)
- [配置](#configuration)
- [输出](#output)
- [检测置信度模型](#detection-confidence-model)
- [局限性](#limitations)
- [贡献](#contributing)
- [许可证](#license)
## 架构
```
flowchart TD
A["Target Domain"] --> B{"Wildcard DNS\nDetection"}
B -->|"wildcard IPs recorded"| C["Passive OSINT\n11 sources, parallel"]
B --> D["Active DNS Brute-Force\nthreaded resolution"]
C --> E["Merge + Dedupe\nSubdomain Set"]
D -->|"wildcard-filtered"| E
E --> F["Live HTTP/HTTPS Probe\nstatus, title, timing, redirect"]
F --> G["WAF / CDN / Tech\nFingerprinting\nevidence + confidence"]
F --> H["Takeover Candidate\nCheck"]
G --> I{"--dirbrute?"}
H --> I
I -->|"yes"| J["Directory Brute-Force\nsoft-404 baselined"]
I -->|"no"| K["Report Generation"]
J --> K
K --> L["JSON"]
K --> M["CSV"]
K --> N["HTML (dark report)"]
```
```
flowchart LR
subgraph Passive Sources
direction TB
S1["crt.sh"]
S2["HackerTarget"]
S3["AlienVault OTX"]
S4["RapidDNS"]
S5["CertSpotter"]
S6["URLScan.io"]
S7["Anubis"]
S8["BufferOver"]
S9["ThreatCrowd"]
S10["Wayback Machine"]
S11["Sublist3r API"]
end
Passive["passive.py\nThreadPoolExecutor(11)"]
S1 & S2 & S3 & S4 & S5 & S6 & S7 & S8 & S9 & S10 & S11 --> Passive
Passive --> Merge["Deduplicated\nSubdomain Set"]
```
## 功能说明
| 阶段 | 模块 | 描述 |
|---|---|---|
| 1 | 通配符 DNS 检测 (`wildcard.py`) | 在暴力破解之前探测随机的不存在的标签以检测 catch-all DNS,从而确保结果不会被误报污染。 |
| 2 | 被动 OSINT (`passive.py`) | 并发查询 11 个独立的公开数据源(crt.sh、HackerTarget、AlienVault OTX、RapidDNS、CertSpotter、URLScan.io、Anubis、BufferOver、ThreatCrowd、Wayback Machine、Sublist3r)。 |
| 3 | 主动 DNS 暴力破解 (`bruteforce.py`) | 针对固定的公共解析器,通过多线程对子域名字典进行解析,并过滤通配符。 |
| 4 | 实时探测 (`liveprobe.py`) | 对每个发现的主机先尝试 HTTPS 再尝试 HTTP GET 请求;捕获状态码、标题、Server banner、响应时间和最终的重定向后 URL。 |
| 5 | 指纹识别 (`fingerprint.py`, `waf.py`, `cdn.py`, `techdetect.py`) | 针对标头、cookie、Server banner 和 HTML body 进行加权特征匹配。每次检测都包含置信度分数和产生该结果的确切证据——绝不仅凭单个模棱两可的标头进行猜测。 |
| 6 | 接管候选检查 (`takeover.py`) | 将响应 body 与已知第三方平台(GitHub Pages、Heroku、S3 等)的“未认领”错误页面进行匹配。**此功能仅标记需人工验证的候选项,并非确认的漏洞。** |
| 7 | 目录暴力破解 (`dirbrute.py`, 可选) | 在扫描之前,建立每个目标 soft-404 行为的基准(随机不存在的路径),然后丢弃任何实际上只是网站通用错误页面的“命中”。 |
| 8 | 报告 (`report.py`) | 生成 JSON + CSV + 带有置信度标注的深色红队风格 HTML 报告。 |
## 安装
```
git clone https://github.com/Muhammad-a11-crypto/SubReconX-v3.1.git
cd SubReconX-v3.1
pip install -r requirements.txt
chmod +x subreconx
```
需要 **Python 3.9+**。如果可用,将使用 `dnspython`(固定解析器,并发解析更快);如果缺失,DNS 模块会自动回退到 `socket.gethostbyname`。
直接使用 `./subreconx -d target.com ...` 或 `python3 subreconx.py -d target.com ...` 运行。
## 使用方法
```
# 完整一次性 recon(passive + active + live probe + fingerprinting)
subreconx -d target.com --all
# 完整 recon + directory brute-force
subreconx -d target.com --all --dirbrute
# 仅 passive OSINT
subreconx -d target.com --passive-only
# 仅 active DNS brute-force
subreconx -d target.com --brute-only
# 独立单模块检查(仅 probe 域名本身一次)
subreconx -d target.com --waf
subreconx -d target.com --cdn
subreconx -d target.com --tech
subreconx -d target.com --takeover
subreconx -d target.com --wildcard
subreconx -d target.com --dirscan
# 自定义线程数、timeout、wordlist;跳过浏览器自动打开
subreconx -d target.com --all -t 150 --timeout 8 -w mylist.txt --no-open
# 在 terminal 输出旁持久化保存完整的 debug log
subreconx -d target.com --all --log-file scan.log
```
运行 `subreconx -h` 获取完整的参数参考。
### 关键参数
| 参数 | 含义 |
|---|---|
| `-d, --domain` | 目标域名(必填) |
| `-w, --wordlist` | 子域名字典(默认:内置的 `wordlist.txt`) |
| `-W, --dirlist` | 用于 `--dirbrute`/`--dirscan` 的目录字典(默认:内置的 `dirlist.txt`) |
| `-o, --output` | 输出文件前缀(默认:`reports/subreconx_report`) |
| `-t, --threads` | 用于暴力破解/实时探测/目录爆破的线程数(默认:100) |
| `--timeout` | HTTP 请求超时时间(秒)(默认:12) |
| `--log-file` | 写入完整的 DEBUG 级别日志文件 |
| `--no-live` | 跳过实时 HTTP/HTTPS 探测(仅进行子域名枚举) |
| `--no-wildcard` | 跳过通配符 DNS 预检查 |
| `--no-open` | 不要在浏览器中自动打开 HTML 报告 |
## 配置
所有可调参数——超时时间、重试次数、线程池大小、DNS 解析器、通配符检测阈值、soft-404 相似度阈值——都集中存在于 `config.py` 中的一个 `Config` dataclass 中,而不是作为魔法数字散落在代码库的各个角落。CLI 参数会在运行时覆盖其中一部分;对于未作为参数公开的任何内容,请直接编辑 `config.py` 中的默认值(例如,将 DNS 解析指向不同的解析器池,或者调整 soft-404 过滤器将页面视为重复项的严格程度)。
## 输出
在 `--all`(或等效的显式阶段组合)下的每次运行都会在 `{output_prefix}.{ext}` 生成三个文件:
- **`.json`** — 完整的结构化扫描结果(子域名、解析的 IP、带有指纹证据的存活主机、目录发现、耗时统计、计数值)。
- **`.csv`** — 每个存活主机一行,用于电子表格分类处理。
- **`.html`** — 深色主题报告,用于浏览发现结果,带有悬停提示框,显示每个 WAF/CDN/技术标签背后的确切证据。
## 检测置信度模型
每次 WAF、CDN 和技术检测都包含一个**置信度分数**(0–100%),该分数取决于有多少种独立的信号类型达成一致:
```
flowchart LR
H["Header match\n+0.5"] --> C["Combined\nConfidence"]
K["Cookie match\n+0.5"] --> C
B["HTML body match\n+0.4"] --> C
SV["Server banner match\n+0.6"] --> C
C --> R["Detection\n(name, confidence, evidence)"]
```
仅匹配到单个标头的置信度上限会低于标头 + cookie + HTML body 同时匹配的情况。接管候选项会被明确标记为“需人工验证”——基于 body 文本的指纹识别仅用于标记候选项,并不能确认其可利用性。
## 局限性
- **被动数据源依赖于第三方免费 API。** 部分(例如 crt.sh、ThreatCrowd)偶尔会受到速率限制或响应缓慢;SubReconX 会记录并跳过失败的数据源,而不是中止运行,但每次运行的覆盖范围会有所不同。
- **接管检测是基于指纹的,并非已确认的漏洞利用。** 在将其作为真实发现报告之前,请务必验证标记候选对象的 DNS CNAME 和第三方服务的认领状态。
- **Soft-404 基准建立减少了目录暴力破解中的误报,但无法完全消除**,尤其是在错误页面高度动态的网站上(例如,将请求的路径嵌入到 body 中,从而破坏了相似度比较)。
- **通配符 DNS 检测使用了少量的随机探测**;极其不寻常的通配符配置(例如,仅作用于特定子树的通配符)可能无法被捕获。
- 这是一个**侦察**工具:它对攻击面进行枚举和指纹识别。它不会利用任何漏洞,在未经人工验证的情况下,其任何“风险”标签都不应被视为实际发现。
## 许可证
仅用于授权的安全测试和漏洞赏金计划。请参阅仓库了解许可证条款。
由 Muhammad Zubair (@Muhammad-a11-crypto) & Menahil Munir 构建
标签:GitHub, Python, 子域名枚举, 安全, 实时处理, 密码管理, 攻击面测绘, 无后门, 系统安全, 超时处理, 逆向工具