Amirhosseing/recon-pipeline
GitHub: Amirhosseing/recon-pipeline
这是一个自动化攻击面管理工具,通过多阶段侦察管道和AI分析简化安全评估流程。
Stars: 0 | Forks: 0
# 侦察管道
一款自动化攻击面管理工具,通过 Flask 网络界面编排一个 13 阶段的安全侦察流程,支持实时 WebSocket 进度显示、MongoDB 数据持久化、Telegram 警报以及 AI 驱动的分析。




## 功能特性
- **13 阶段流程** — Subfinder, PureDNS, DNSx, CDNCheck, Nmap, TLSx, HTTPx, Katana, VHost, SNI, Nuclei, FFUF, Gowitness
- **AI 安全分析** — 通过兼容 OpenAI 的 LLM(Ollama、vLLM 等)进行结构化风险评估
- **实时进度** — 每个阶段运行时通过 WebSocket 驱动 UI 更新
- **续传支持** — 可从上一个完成的阶段停止并恢复扫描
- **调度功能** — 支持一次性、每日、每周或每月的重复扫描
- **仪表盘** — 包含按工具计数、筛选和 CSV 导出的历史扫描结果
- **Telegram 警报** — 在扫描开始/完成、发现新子域名时发送通知
- **持续监控** — 后台线程每 4 小时检查新子域名
- **Docker 部署** — 包含 MongoDB 和所有预装 Go 安全工具的完整技术栈
## 快速开始
### Docker (推荐)
```
git clone https://github.com/Amirhosseing/recon-pipeline.git
cd recon-pipeline
docker-compose up --build -d
```
应用将在 `http://localhost:5000` 启动,包含 MongoDB 和所有安全工具。
### 手动安装
```
# 安装 Python 依赖项
pip install -r requirements.txt
# 确保 MongoDB 本地运行中
# 确保安全工具位于 $PATH 或 ~/go/bin 中
# 设置环境变量
export SECRET_KEY="your-secret-key"
export ADMIN_USER="administrator"
export ADMIN_PASS="your-password"
export MONGO_URI="mongodb://localhost:27017/"
export DB_NAME="recon_pipeline"
# 可选选项
export TELEGRAM_BOT_TOKEN="your-bot-token"
export TELEGRAM_CHAT_ID="your-chat-id"
export LLM_API_KEY="your-api-key"
export LLM_BASE_URL="http://localhost:11434/v1"
export LLM_MODEL="qwen3:8b"
python app.py
```
### 安装安全工具
```
# 子域名枚举
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
# DNS 暴力破解(需要 massdns)
go install github.com/d3mondev/puredns/v2@latest
# DNS 解析
go install -v github.com/projectdiscovery/dnsx/cmd/dnsx@latest
# CDN/WAF 过滤
go install -v github.com/projectdiscovery/cdncheck/cmd/cdncheck@latest
# TLS 分析
go install -v github.com/projectdiscovery/tlsx/cmd/tlsx@latest
# HTTP 探测
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest
# 网络爬取
go install github.com/projectdiscovery/katana/cmd/katana@latest
# 漏洞扫描
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
# 目录模糊测试
go install github.com/ffuf/ffuf/v2@latest
# 截图(需要 chromium)
go install github.com/sensepost/gowitness@latest
# 端口扫描
sudo apt install nmap
```
验证安装:
```
python -c "import utils; utils.check_dependencies()"
```
## 架构设计
模块化的 Flask 应用,分布在多个文件中:
| 文件 | 用途 |
|------|------|
| `app.py` | 入口点 — 启动服务器和后台线程 |
| `config.py` | 环境配置、日志记录、`ANALYSIS_SCHEMA` |
| `extensions.py` | Flask 应用、SocketIO、MongoDB 客户端、全局状态 |
| `utils.py` | 工具解析器、JSON 解析器、扫描 ID 生成器 |
| `templates.py` | 内联 HTML/CSS/JS(登录和仪表盘 UI) |
| `telegram.py` | Telegram 警报助手函数 |
| `routes/all_routes.py` | 所有 Flask 路由:认证、扫描 CRUD、文件操作、AI 分析 |
| `core/scanner.py` | `ScanRunner` — 13 阶段流程编排器 |
| `core/background.py` | 调度器循环 + 持续子域名监控器 |
### 扫描流程
各阶段顺序执行。如果已完成,续传时可跳过相应阶段。
| # | 工具 | 用途 | 输出文件 |
|---|------|------|----------|
| 1 | Subfinder | 被动子域名枚举 | `subfinder.json` |
| 2 | PureDNS | 主动 DNS 暴力破解 | `puredns_all.txt` |
| 3 | DNSx | DNS 解析(A, CNAME, NS, MX, TXT) | `dnsx.json` |
| 4 | CDNCheck | 过滤 CDN/WAF/Cloud IP | `active_ips.txt` |
| 5 | Nmap | 端口扫描 | `nmap.xml` |
| 6 | TLSx | TLS 证书分析 | `tlsx.json` |
| 7 | HTTPx | 活跃 Web 服务器探测 | `httpx.json` |
| 8 | Katana | 网络爬行 | `katana.jsonl` |
| 9 | VHost | 虚拟主机发现 | `vhost_*.json` |
| 10 | SNI | 基于 SNI 的虚拟主机发现 | `sni_*.json` |
| 11 | Nuclei | 漏洞扫描 | `nuclei.jsonl` |
| 12 | FFUF | 目录模糊测试 | `ffuf_dir.json` |
| 13 | Gowitness | 截图捕获 | `screenshots/` |
### 数据流
```
target_list (original domains)
├── Subfinder ──→ current_targets (accumulated subdomains)
├── PureDNS ──→ current_targets
└── DNSx ──→ safe_ips ──→ CDNCheck ──→ safe_ips (filtered)
├── Nmap ──→ nmap_targets (IP:port)
├── VHost
└── SNI Check
current_targets + nmap_targets
└── HTTPx ──→ live_urls
├── Katana
├── FFUF
├── Gowitness
└── Nuclei
```
## 配置选项
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `SECRET_KEY` | *(不安全)* | Flask 会话密钥 |
| `ADMIN_USER` | `administrator` | 登录用户名 |
| `ADMIN_PASS` | `Qwer12#$` | 登录密码 |
| `MONGO_URI` | `mongodb://localhost:27017/` | MongoDB 连接字符串 |
| `DB_NAME` | `recon_pipeline` | MongoDB 数据库名称 |
| `TELEGRAM_BOT_TOKEN` | *(空)* | Telegram 机器人 API 令牌 |
| `TELEGRAM_CHAT_ID` | *(空)* | 用于警报的 Telegram 聊天 ID |
| `LLM_API_KEY` | *(空)* | 兼容 OpenAI 的 API 密钥 |
| `LLM_BASE_URL` | `http://host.docker.internal:11434/v1` | LLM 端点 |
| `LLM_MODEL` | `qwen3:8b` | LLM 模型名称 |
## API 参考
| 方法 | 端点 | 说明 |
|------|------|------|
| GET/POST | `/login` | 身份认证 |
| GET | `/logout` | 结束会话 |
| GET | `/` | 主扫描器 UI |
| GET | `/api/targets` | 列出已保存的目标 |
| POST | `/api/targets` | 保存一个目标 |
| POST | `/start_scan` | 创建并开始扫描 |
| GET | `/scan_status/` | 获取扫描状态 |
| GET | `/api/history` | 分页扫描历史 |
| GET | `/download/` | 下载扫描结果(ZIP) |
| GET | `/api/scan_files/` | 列出扫描输出文件 |
| GET | `/api/view_file//` | 查看扫描输出文件 |
| GET | `/export_csv/` | 将 Nuclei 发现导出为 CSV |
| POST | `/api/stop_scan/` | 停止运行中的扫描 |
| POST | `/api/resume_scan/` | 恢复已停止的扫描 |
| POST | `/api/ai_analysis/` | AI 安全分析 |
| DELETE | `/api/delete_scan/` | 删除扫描及其文件 |
## 测试
```
pip install pytest mongomock
pytest tests/test_app.py -v
# 运行单个测试类
pytest tests/test_app.py -v -k TestAuthentication
# 运行单个测试方法
pytest tests/test_app.py -v -k test_login_success
```
测试套件覆盖了认证、扫描生命周期、历史 API、文件操作、CSV 导出、ScanRunner 助手函数、Telegram 警报、AI 分析、后台线程和工具函数。
## 安全须知
1. **更改默认凭据** — 设置 `SECRET_KEY`、`ADMIN_USER` 和 `ADMIN_PASS`
2. **使用 HTTPS** — 在带有 TLS 的反向代理后部署
3. **限制网络访问** — 绑定到 `127.0.0.1` 或使用防火墙规则
4. **确保 MongoDB 安全** — 启用认证并限制访问
5. **审查工具参数** — 自定义参数会传递给子进程命令
## 许可证
本项目仅用于授权的安全测试和教育目的。扫描任何目标前,请确保您已获得适当的授权。
标签:C2, 日志审计, 请求拦截, 逆向工具