heanczko311299/recon-osint
GitHub: heanczko311299/recon-osint
遵循 eWPTX 方法论的被动 OSINT 侦察框架,整合多源情报收集与 AI 报告生成,用于 Web 渗透测试前期资产测绘。
Stars: 0 | Forks: 0
# Recon-OSINT





专为 Web 渗透测试初始侦察阶段设计的被动 OSINT 侦察框架,遵循 **eWPTX 方法论**。
该工具仅从**公开来源**收集开源情报 —— 它不会与目标系统进行任何直接接触。
## 法律声明
## 功能介绍
Recon-OSINT 用于在任何主动测试开始之前,描绘目标的公开足迹。
| 内容 | 方式 | 被动? |
|------|-----|----------|
| 子域名枚举 | Sublist3r, crt.sh, Wayback CDX | ✅ 是 |
| 历史 URL 与文件泄露 | Wayback Machine CDX API | ✅ 是 |
| 已索引的敏感文档 | DuckDuckGo dorks | ✅ 是 |
| 暴露的邮箱 | DuckDuckGo `"@domain"` dork | ✅ 是 |
| 公共仓库中的 Secrets | GitHub search API | ✅ 是 |
## 快速开始
```
# 1. 安装
sudo python3 install.py
# 2. 域名侦察 (子域名)
recon-osint run example.com --module domain
# 3. 敏感文件暴露
recon-osint run example.com --module sensitive
# 4. 全面侦察 + AI 报告
recon-osint run example.com --module all
```
## 模块
### `--module domain`
从三个独立来源进行被动子域名枚举。
| 来源 | 发现内容 | 输出文件 |
|--------|--------------|-------------|
| Sublist3r | 通过搜索引擎与 DNS 获取子域名 | `sublist3r.md` |
| crt.sh | 来自 TLS 证书日志的子域名 | `crtsh.md` |
| Wayback Machine CDX | 历史存档 URL 中出现的子域名 | `wayback_subdomains.md` |
| AI (OpenAI) | 面向渗透测试的解读 | `domain_report_{domain}.pdf` |
### `--module sensitive`
被动发现暴露的文件、凭证和敏感数据。
| 来源 | 发现内容 | 输出文件 |
|--------|--------------|-------------|
| Wayback Machine CDX | 10 000 条历史存档 URL 中按扩展名筛选的文件及敏感路径 | `wayback_sensitive.md` |
| DuckDuckGo dorks | 按文件类型索引的文件、敏感关键词、暴露的邮箱 | `dorks.md` |
| GitHub | 公共仓库及代码中的 Secrets/敏感文件 | `github.md` |
| AI (OpenAI) | 面向渗透测试的解读 | `sensitive_report_{domain}.pdf` |
### `--module all`
按顺序运行上述两个模块。Wayback Machine 仅查询一次(结果复用)。生成一份额外的 AI 综合执行报告。
| 输出 |
|--------|
| 所有单独的 `.md` 文件 |
| `domain_report_{domain}.pdf` |
| `sensitive_report_{domain}.pdf` |
| `full_report_{domain}.pdf` — AI 渗透测试路线图 |
**结果保存至:** `results/recon//`
## AI 分析
在每个模块结束时,AI 会读取所有生成的 `.md` 文件并生成面向渗透测试的解读:
- 在主动阶段应优先测试哪些子域名
- 敏感发现揭示了基础设施的哪些信息
- 暴露的数据如何在 Web 渗透测试中被利用
- 具体的 eWPTX 对齐渗透测试路线图
需要在 `.env` 中设置 `OPENAI_API_KEY`。如果没有,工具仍可完全运行 —— 只是会跳过 AI 分析部分。
## 配置
在项目根目录创建一个 `.env` 文件:
```
# AI 分析所需
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4o-mini
AI_TEMPERATURE=0.3
# GitHub 代码搜索所需
GITHUB_TOKEN=ghp_...
```
### GitHub token
生成地址:**GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)**
最小权限范围:**`public_repo`**(对公共仓库的只读访问权限)
如果没有 token,GitHub 模块将仅运行仓库搜索 —— 该功能不需要身份验证。
## OSINT 标准
编辑 `config/osint_criteria.md` 以自定义工具的搜索目标。无需修改代码。
```
[wayback]
extensions = .sql, .env, .bak, .log, .xml, .json, .pem...
sensitive_paths = /admin, /backup, /.git, /.env, /api...
[dorks]
filetypes = pdf, doc, xlsx, xml, sql, env, pem, key...
sensitive = password, credentials, apikey, token...
[github]
secrets = api_key, password, token, aws_key, ssh_key...
filetypes = .env, .pem, docker-compose.yml, id_rsa...
```
## 技术说明
### Wayback Machine
使用带有 `matchType=prefix` 参数的 CDX API —— 这与 `waybackpy --known-urls` 使用的查询策略相同。对于大多数域名,`matchType=domain` 通配符查询返回 0 个结果;前缀匹配(prefix)才是正确的方法。每次扫描最多获取 10 000 个 URL,并根据敏感扩展名和路径进行过滤。
### DuckDuckGo Dorks
使用 `ddgs` 包(`duckduckgo_search` 的重命名后续版本)。`requirements.txt` 和 `install.py` 直接引用 `ddgs` 以避免弃用警告。DuckDuckGo 对 `filetype:` 的支持不如 Google 精确 —— 结果因域名而异,对于较小的目标可能较为稀少。
## 语言
首次运行时,工具会询问使用哪种语言:
```
[1] English
[2] Español
[3] Deutsch
[4] Français
[5] Nederlands
```
偏好设置保存在 `.lang` 中。可随时使用 `recon-osint lang` 更改。
报告和 AI 分析将以选定的语言生成。
## 项目结构
```
recon-osint/
├── recon.py Entry point
├── install.py Bootstrap installer
├── uninstall.py Clean uninstaller
├── pyproject.toml
├── requirements.txt
├── .gitignore
├── lang/
│ ├── en.yml
│ ├── es.yml
│ ├── de.yml
│ ├── fr.yml
│ └── nl.yml
├── config/
│ └── osint_criteria.md Edit to customise what to look for
├── core/
│ ├── banner.py
│ ├── lang.py
│ └── utils.py
└── modules/
├── mod_sublist3r.py
├── mod_crtsh.py
├── mod_wayback.py Subdomains + sensitive (single CDX query, reused)
├── mod_dorks.py DuckDuckGo via ddgs
├── mod_github.py
├── ai_analyzer.py
├── cli.py
├── config.py
├── criteria.py
├── reporter.py
└── scanner.py
```
## 面向开发者
### 添加新语言
1. 复制 `lang/en.yml` → `lang/sv.yml`
2. 设置 `language_name` 和 `language_code`
3. 翻译所有值 —— 切勿翻译键
4. 完整保留所有 `{variable}` 占位符
5. 该语言将自动出现在菜单中 —— 无需修改代码
### 向模块添加新来源
1. 在相关的 `mod_*.py` 中添加您的函数
2. 从 `run()` 调用它并将结果合并到字典中
3. 将您的来源添加到 `to_markdown()`
### 添加新模块
1. 创建 `modules/mod_newmodule.py`,包含 `run(domain)` 和 `to_markdown(data, lang_t)`
2. 在 `modules/scanner.py` 中注册它
3. 将新的 CLI 键添加到所有 `lang/*.yml` 文件中
## 贡献
欢迎提交 Pull request。
- **新语言** —— 翻译 `lang/en.yml` 并提交 PR
- **新来源** —— 附带测试结果扩展现有模块
- **Bug 报告** —— 提交 issue 并附上复现步骤
- **标准更新** —— 更新 `config/osint_criteria.md`
## 许可证
MIT —— 详见 [LICENSE](LICENSE)
*为安全专业人员打造。被动侦察,专业结果。*
*围绕 eWPTX Web 渗透测试方法论设计。*
标签:AI报告生成, DuckDuckGo Dorks, ESC4, eWPTX, GitHub Secrets, IPv6支持, OSINT, Petitpotam, Python, Wayback Machine, Web安全, 反汇编, 子域名挖掘, 子域名枚举, 安全工具库, 实时处理, 对称加密, 敏感文件泄露, 无后门, 系统安全, 网络安全, 自动化审计, 蓝队分析, 被动侦察, 证书透明度日志, 逆向工具, 隐私保护