mnt0x/ghost_recon_tool
GitHub: mnt0x/ghost_recon_tool
一款纯被动域名 OSINT 侦察工具,通过第三方公开来源聚合 19 类证据,在不接触目标的前提下完成全面的域情报收集与规范化报告生成。
Stars: 3 | Forks: 0
# Ghost Recon Tool
[](https://www.python.org/downloads/)
[](LICENSE)
[](#passive-only-by-design)
[](#)
Ghost Recon Tool (GRT) 收集有关域名的公开情报 —— DNS、证书、Web 存档、暴露的资产、泄露的引用、ASN、技术栈 —— 并将其整合到一份统一的规范化报告中。它围绕严格的纯被动策略构建:每个来源都是第三方(证书透明度日志、Web 存档、公共扫描数据库、代码搜索、泄露推送),因此目标不会看到来自您基础设施的任何流量和探测。
相同的引擎既可为脚本化工作流提供 CLI,也可在 `http://localhost:5000` 提供本地 Web UI,用于交互式审查和下载报告。
## 快速开始
```
git clone https://github.com/mnt0x/ghost_recon_tool.git
cd ghost_recon_tool
python -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python recon.py -d example.com # first scan, no keys required
```
若要启动 Web UI,请运行:
```
python recon.py --no-browser
# 打开 http://localhost:5000
```
## 功能特性
- 🛰️ **设计上纯被动。** 默认策略会阻止任何会接触到目标的模块。Web 和 CLI 共享相同的引擎以及相同的 `policy.passive_only=true` 强制策略。
- 🧩 一份报告中包含 **19 个证据类别**:DNS、子域名、电子邮件、技术栈、WHOIS、IP、SSL/CT、Web 存档、数据泄露、信誉、云资产、仿冒域名、社交足迹、ASN 情报、Dorks、被动产物、漏洞、风险评分和关联分析。
- 🔑 **可选 API 密钥,可选增强。** 在没有密钥的情况下可完全运行;配置后,五个免费层级的提供商会增加覆盖范围。
- 📂 **多格式输出。** 同一次扫描可输出 JSON、纯文本、交互式 HTML、静态 HTML 捆绑包以及 ZIP 下载。
- 🌐 **本地 Web UI。** 保存扫描历史记录,大型报告采用延迟加载部分,以及直接下载 —— 一切均在 `localhost` 上进行。
- 🧪 **严格的内容规则。** 没有合成的电子邮件,没有伪造的 dorks,没有无版本的 CVE,没有基于缺失项的发现。
## 架构
GRT 是一个单一的 Python 应用程序,具有两个入口界面(CLI 和 aiohttp Web 服务器),共享同一个引擎、同一个策略模型和同一个报告构建器。
```
┌────────────────────────────┐
recon.py -d example.com ──▶ │ CLI entry │ ─┐
└────────────────────────────┘ │
▼
recon.py --no-browser ──▶ ┌────────────────────────────┐ ┌──────────────────────┐
│ aiohttp WebServer │ ─▶│ ReconEngine.run() │
│ localhost:5000 │ │ (passive modules) │
└────────────────────────────┘ └──────┬───────────────┘
│
▼
┌────────────────────────────────────────────────────────────┐
│ ScanPolicy (passive_only=true) + SourceRegistry │
│ HttpGuard (per-scan rate limit, retries, request logging) │
└────────────────┬───────────────────────────────────────────┘
│
┌──────────────────────────────┴──────────────────────────────┐
│ │
▼ ▼
Public passive sources Optional keyed sources
(Wayback, Common Crawl, URLScan, (Chaos, VirusTotal,
crt.sh, certspotter, OTX, Shodan GitHub Code, BeVigil,
InternetDB, HackerTarget, etc.) AlienVault OTX)
│
▼
┌──────────────────────────┐
│ ReportBuilder │
│ - canonical report.json│
│ - report.txt │
│ - report.html │
│ - web_summary.json │
│ - web_sections/*.json │
│ - full_static_report │
│ - downloadable ZIP │
└──────────────────────────┘
```
### 设计上纯被动
- 有两个证据类别**默认被禁用**:接管检测和安全头探测。这两者都需要与目标进行直接接触。它们作为目录的一部分供未来选择启用,但在开箱时是关闭的。
- 共享的 HTTP 守卫按每次扫描绑定其状态,因此请求预算是隔离的,且策略关口无法通过重用先前扫描的会话来绕过。
- `policy.passive_only=true` 记录在每一份报告中,以便审查者可以在事后验证其执行情况。
## 用法
### CLI
```
# Quick scan: 最小攻击面,速度最快,适用于 triage。
python recon.py -d example.com --mode quick
# Standard scan: 默认深度,平衡运行时间与覆盖率。
python recon.py -d example.com --mode standard
# Deep scan: 最大被动覆盖率,运行时间较长,完整 archive paging。
python recon.py -d example.com --mode deep
# 即使存在 API keys 也强制在没有 API keys 的情况下运行。
python recon.py -d example.com --no-keys
# 显式选择输出格式。
python recon.py -d example.com --output json,html,txt
# 验证 provider 就绪情况、依赖项和 template 完整性。
python recon.py --doctor
```
有用的标志:
| 标志 | 作用 |
|---|---|
| `-d, --domain DOMAIN` | 目标域名 |
| `--mode {quick,standard,deep}` | 扫描深度配置 |
| `--output {json,html,txt,zip,all}` | 一种或多种格式,以逗号分隔 |
| `--no-keys` | 在本次运行中忽略已配置的密钥 |
| `--no-browser` | 启动 Web UI 时不自动打开浏览器 |
| `--doctor` | 自检提供商、依赖项和模板 |
| `-h, --help` | 完整标志列表 |
### Web UI
```
python recon.py # opens browser at http://localhost:5000
python recon.py --no-browser # same server without auto-opening
```
Web UI 允许您:
- 通过实时进度启动和监控扫描。
- 从本地历史记录中查看过去的扫描。
- 通过延迟加载的部分打开大型报告(不会产生 1 GB 的 DOM 负载)。
- 下载独立的 HTML、完整的静态 HTML、ZIP 包、JSON 和 CSV 导出文件。
- 在管理员登录后配置 API 密钥(HttpOnly cookie,`SameSite=Strict`)。
### 输出
每次扫描都可以生成:
| 文件 | 用途 |
|---|---|
| `report.json` | 规范的机器可读报告 —— 包含每个实体、发现和源状态字段 |
| `report.txt` | 纯文本摘要,便于 grep |
| `report.html` | 带有延迟加载运行时的交互式 HTML |
| `web_summary.json` + `web_sections/*.json` | Web UI 用于快速初始渲染的辅助文件 |
| `full_static_report.html` | 用于离线审查的独立 HTML 捆绑包 |
| `report.zip` | 包含上述内容的打包文件,用于归档或分享 |
## API 密钥(可选)
GRT 可以在无密钥状态下运行。添加以下五个提供者中的任何一个都会增加覆盖范围;这五个都提供免费层级,并且与主动扫描无关。
| 提供者 | 增加内容 | 免费注册 |
|---|---|---|
| Chaos (ProjectDiscovery) | 大容量被动子域名枚举 | https://chaos.projectdiscovery.io |
| VirusTotal | 被动 DNS、额外的子域名命中、文件/URL 信誉 | https://www.virustotal.com/gui/join-us |
| GitHub Token | GitHub 代码搜索 Dorks(配置文件、凭据、电子邮件暴露) | https://github.com/settings/tokens |
| BeVigil | 源自移动应用的子域名足迹 | https://bevigil.com/osint-api |
| AlienVault OTX | 被动 DNS,恶意软件/滥用指标 | https://otx.alienvault.com/api |
通过 `.env`(复制 `.env.example`)、系统密钥环或 Web UI 设置页面进行配置。优先级:Web 会话 → 密钥环 → 本地存储 → 环境变量 → `.env`。密钥绝不会写入报告中。
## 比较
GRT 专注于一个狭窄的目标 —— 具有整洁报告的被动域侦察 —— 而不是试图成为一个完整的图形平台。下表是一个基于事实的特性矩阵,而不是排名。
| 功能 | Ghost Recon Tool | Maltego CE | SpiderFoot | theHarvester | Amass | subfinder |
|---|:---:|:---:|:---:|:---:|:---:|:---:|
| 强制纯被动策略 | ✓ | 部分 | 可配置 | ✓ | 可配置 | ✓ |
| 免费 / 开源 | ✓ (MIT) | 免费增值 | ✓ | ✓ | ✓ | ✓ |
| 本地 Web UI | ✓ | 桌面 GUI | ✓ | – | – | – |
| 单一二进制 / `pip install` 工作流 | ✓ | – | ✓ | ✓ | ✓ | ✓ |
| 子域名枚举 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 电子邮件发现 | ✓ | ✓ | ✓ | ✓ | – | – |
| Web 存档摄取 (Wayback, CC) | ✓ | – | 部分 | – | – | – |
| 证书透明度聚合 | ✓ | – | ✓ | 部分 | ✓ | ✓ |
| 带版本的 CVE 漏洞映射 | ✓ | – | 部分 | – | – | – |
| 风险评分 + 关联分析 | ✓ | – | ✓ | – | – | – |
| 内置静态 HTML 报告 | ✓ | – | 部分 | – | – | – |
| 一份报告中包含 19 个证据类别 | ✓ | 需要 transforms | ✓ | – | – | – |
竞争工具的状态基于其在此版本发布时的公开文档行为;请对照其当前文档进行验证。
## 验证
版本 0.1 通过 28 次扫描(7 个域名 × 4 种模式:CLI/Web × 无密钥/有密钥)进行了端到端验证,涵盖了小型、中型和高表面的目标。以下是这些扫描的汇总结果,均直接从 `report.json` 中读取:
- 28/28 状态为 `COMPLETED`
- 每次报告中均包含 `policy.passive_only=true`
- 报告了 2,572 个漏洞,其中 2,572 个具有版本化的 `CVE-YYYY-NNNN`,0 个无版本,0 个基于缺失项的发现
- 0 个伪造的 dorks(仅来源:被动 Web 存档、URLScan,以及在配置了 GitHub token 的情况下来自 github 代码搜索)
- 0 次接管(模块默认禁用;需要主动探测)
- 无密钥运行:在 14/14 的报告中 `api_enabled_count=0`,`missing_credentials=5`
- 有密钥运行:在 14/14 的报告中 `api_enabled_count=5`,`missing_credentials=0`
## 路线图
仅表示方向,非最后期限。如有变化,恕不另行通知。
- 更严格的 RFC 5321/5322 电子邮件提取器,以减少在高度模板化的存档上的解析噪音。
- 面向社区贡献的被动来源的可选插件接口。
- 同一域名的两次扫描之间的结果差异比对。
- Web UI 字符串的国际化。
- 可选的选择性启用的主动模块(默认仍处于关闭状态),需通过显式标志和明确的范围警告来控制。
## 贡献
欢迎提交 Issue 和 Pull Request。对于 Bug,请附上 GRT 版本、扫描模式、目标域名(或经过脱敏处理的等效内容),以及能展示该问题的 `report.json` 相关部分。对于功能建议,请先开启一个 Issue 讨论范围,然后再提交代码。这是一个由单人维护的项目,因此审查进度会尽最大努力。
## 许可证
在 MIT 许可证下发布。详见 [`LICENSE`](LICENSE)。
## 致谢
GRT 建立在一系列开源库和公开被动数据源的基础之上,包括:
- Python 生态系统:`aiohttp`、`jinja2`、`rich`、`tldextract`、`beautifulsoup4`、`keyring`
- 公开被动来源:Wayback Machine、Common Crawl、URLScan、AlienVault OTX、crt.sh、certspotter、HackerTarget、Shodan InternetDB
- 可选提供商:ProjectDiscovery Chaos、VirusTotal、GitHub Code Search、BeVigil
感谢上述列出的每个项目的维护者。他们均不隶属于本工具,也不为本工具背书。
## 免责声明
仅供授权使用。您有责任遵守您运营所在司法管辖区的适用法律、合同和计划规则。该工具在设计上是被动性的,但您仍需对您选择扫描的目标负责。
标签:CLI, DNS分析, ESC4, GitHub, OSINT, Python, TCP SYN 扫描, Web UI, WHOIS查询, WiFi技术, 企业资产盘点, 协议探测, 占用监测, 域名侦察, 子域名枚举, 安全工具库, 实时处理, 情报收集, 数据展示, 无后门, 泄露检测, 漏洞研究, 系统安全, 红队, 网站指纹, 网络安全, 聊天机器人, 被动侦察, 证书透明度, 资产管理, 逆向工具, 隐私保护