Amirhosseing/recon-pipeline

GitHub: Amirhosseing/recon-pipeline

这是一个自动化攻击面管理工具,通过多阶段侦察管道和AI分析简化安全评估流程。

Stars: 0 | Forks: 0

# 侦察管道 一款自动化攻击面管理工具,通过 Flask 网络界面编排一个 13 阶段的安全侦察流程,支持实时 WebSocket 进度显示、MongoDB 数据持久化、Telegram 警报以及 AI 驱动的分析。 ![Python](https://img.shields.io/badge/Python-3.11-blue) ![Flask](https://img.shields.io/badge/Flask-3.x-green) ![MongoDB](https://img.shields.io/badge/MongoDB-7.x-green) ![Docker](https://img.shields.io/badge/Docker-Compose-blue) ## 功能特性 - **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, 日志审计, 请求拦截, 逆向工具