Aymwvn/AI-Assisted-Pentest-Co-Pilot

GitHub: Aymwvn/AI-Assisted-Pentest-Co-Pilot

一款利用 AI 和标准方法论,帮助渗透测试人员分析侦测结果并规划下一步测试动作的辅助工具。

Stars: 0 | Forks: 0

# AI Scanner — AI 辅助的渗透测试 Co-Pilot [![Python](https://img.shields.io/badge/python-3.10%2B-blue)]() [![License](https://img.shields.io/badge/license-MIT-green)]() 一款 CLI 工具,旨在帮助渗透测试人员在测试期间决定**下一步该做什么**。 向其输入真实的侦测工具输出(nmap, gobuster, whatweb, ffuf, nikto),它便 能交叉比对不同工具的发现结果,利用真实的 CVE/CVSS 数据 和 MITRE ATT&CK 映射对其进行丰富(enrich),随后使用 AI 顾问 遵循 PTES/OWASP 方法论建议排序后的下一步操作—— 最后生成一份完整的 DOCX、PDF 或 Markdown 格式的渗透测试报告。 **这并不是一个替你攻击目标的扫描器。** 它是一个方法论 顾问:由你来运行真实的工具,它则像资深渗透测试专家一样, 帮助你分析这些结果意味着什么,以及接下来该尝试什么。仅将其用于 你获得授权测试的系统(你自己的 Docker 实验环境、DVWA、Juice Shop、 CTF 靶机等)。 ## 功能 - **多工具输入**:nmap, gobuster, whatweb, ffuf, nikto - **关联引擎**:交叉比对跨工具的发现结果,而不是 孤立地将它们列出(例如:检测到的 CMS + 发现的后台管理面板 → 合并为一条经过优先级排序的发现,而不是两行互不相连的数据) - **真实的漏洞情报**:针对 NVD 进行实时的 CVE 查询、 CVSS 评分(真实评分或明确标记的预估分)、置信度评级,以及 为每项发现提供 MITRE ATT&CK 技术映射 - **AI 顾问**:在丰富后的攻击面上使用 严格的 JSON 约束 prompt 进行推理 —— 输出排序后的下一步建议,而不是作为一个聊天机器人 - **证据管理**:截图、HTTP 请求/响应、PoC 脚本和笔记,全部绑定到特定的会话中 - **支持 3 种格式的报告**:DOCX、PDF 和 Markdown —— 数据相同、 结构一致,均基于完整的会话日志生成 - **基于 SQLite 的会话**:一次测试任务可以随着时间推移积累 多次工具运行的上下文,正如真实渗透测试的运作方式 ## 设置 **前置条件:** Python 3.10+,以及你想要输入的侦测工具 — [nmap](https://nmap.org/), [gobuster](https://github.com/OJ/gobuster), [whatweb](https://github.com/urbanadventurer/WhatWeb), [ffuf](https://github.com/ffuf/ffuf), [nikto](https://github.com/sullo/nikto) — 安装你打算使用的任意工具即可。 ``` git clone https://github.com/Aymwvn/AI-Assisted-Pentest-Co-Pilot.git cd AI-Assisted-Pentest-Co-Pilot pip install -r requirements.txt export ANTHROPIC_API_KEY=your-key-here ``` 在 [console.anthropic.com](https://console.anthropic.com) 获取 API 密钥。 除 `session next`(AI 顾问)外,其他所有功能均无需 API 密钥和 任何成本即可运行 —— 解析、关联、CVE 查询、证据和报告 全部可以在没有它的情况下运行。 ## 用法 ### 1. 为测试任务开启一个会话 ``` python cli.py session start --name juice-shop-test --target http://localhost:3000 ``` ### 2. 随时输入你的侦测数据 ``` nmap -sV localhost > nmap_out.txt python cli.py session add --name juice-shop-test --file nmap_out.txt --type nmap gobuster dir -u http://localhost:3000 -w wordlist.txt -o gobuster_out.txt python cli.py session add --name juice-shop-test --file gobuster_out.txt --type gobuster whatweb http://localhost:3000 > whatweb_out.txt python cli.py session add --name juice-shop-test --file whatweb_out.txt --type whatweb ``` 支持的 `--type` 值:`nmap`, `gobuster`, `whatweb`, `ffuf`, `nikto`, `raw` (raw = 粘贴任意文本并跳过解析)。 ### 3. 查看关联后的攻击面 ``` python cli.py session surface --name juice-shop-test ``` 这会交叉比对目前收集到的所有信息 —— 例如,开放的数据库端口、 暴露的 `.env` 文件以及发现的后台管理面板,不会仅仅作为三行 独立的数据存在,它们会被关联起来并生成排序后的发现结果。 默认情况下,这还会利用以下信息**丰富**每项发现: - 来自 NVD(国家漏洞数据库)的真实 CVE 匹配,当存在可供 搜索的服务和版本时 - CVSS 评分 —— 来自匹配 CVE 的真实评分,或者在 没有精确匹配的 CVE 时,提供明确标记的保守预估分 - 置信度评级(`high` / `medium` / `low`)—— 高置信度意味着 匹配到了真实的 CVE,或者版本已被明确确认 - 参考链接(相关服务/分类的 HackTricks 页面) - MITRE ATT&CK 技术映射 使用以下命令跳过丰富步骤(速度更快,完全离线): ``` python cli.py session surface --name juice-shop-test --no-enrich ``` 注意:NVD 的公共 API 具有较低的速率限制(如果没有 API 密钥,限制为 5 次请求/30秒),因此查询结果会被缓存到 `~/.ai-scanner/cve_cache.json` 中,每个服务和版本保留一周 —— 重复调用 `surface` 或 `next` 不会针对相同的服务版本重新查询 NVD。 ### 4. 询问下一步该做什么 ``` python cli.py session next --name juice-shop-test ``` AI 顾问会读取目前收集到的所有信息,并返回排好序的 下一步建议,包含风险上下文和建议的测试方法 —— 而非漏洞利用代码。 ### 5. 在确认发现时记录证据 ``` # 一个备注 python cli.py session log-evidence --name juice-shop-test --type note \ --text "Confirmed default creds work on admin panel" --desc "Auth bypass confirmation" # 一张截图 python cli.py session log-evidence --name juice-shop-test --type screenshot \ --file login_success.png --desc "Logged in with admin/admin" --linked-finding "admin_panel_exposed" # 一个保存的 HTTP request/response python cli.py session log-evidence --name juice-shop-test --type http_request \ --file request.txt --desc "SQLi payload and response" # 一个 PoC 脚本 python cli.py session log-evidence --name juice-shop-test --type poc \ --file exploit.py --desc "Script confirming the SQLi" python cli.py session list-evidence --name juice-shop-test ``` 证据类型:`screenshot`, `http_request`, `poc`, `note`。使用 `--file`(将文件复制到 `~/.ai-scanner/evidence//`)或 `--text`(直接存储在数据库中)—— 不能同时使用这两者。 ### 6. 在确认漏洞时手动记录发现 ``` python cli.py session log-finding --name juice-shop-test \ --desc "SQLi confirmed on /login via error-based payload" \ --severity high ``` ### 7. 生成报告 ``` # DOCX(默认) python cli.py session report --name juice-shop-test --output final_report.docx # PDF python cli.py session report --name juice-shop-test --format pdf --output final_report.pdf # Markdown(在 GitHub 上原生渲染,适合用于 PFE 报告附录) python cli.py session report --name juice-shop-test --format md --output final_report.md ``` 格式会根据 `--output` 的扩展名进行推断,或者使用 `--format docx|pdf|md` 显式指定。这三种格式均包含相同的章节: 侦测数据、关联后的攻击面(包含 CVE/CVSS/置信度/MITRE)、 已确认的发现、证据(对于 docx/pdf 会嵌入截图), 以及 AI 顾问的指导建议。 添加 `--no-enrich` 可以跳过 NVD 的 CVE 查询,从而实现更快速、完全离线的 报告生成。 ### 其他命令 ``` python cli.py session list # list all sessions python cli.py session show --name X # dump raw session JSON python cli.py session delete --name X # delete a session ``` ## 架构 ``` ai-scanner/ ├── cli.py # CLI entry point (click) ├── scanner/ │ ├── session.py # SQLite-backed session state (~/.ai-scanner/sessions.db) │ ├── evidence.py # stores screenshots/requests/PoCs/notes per │ │ # session (~/.ai-scanner/evidence//) │ ├── parsers/ # turn raw tool output into structured findings │ │ ├── nmap_parser.py │ │ ├── gobuster_parser.py │ │ ├── whatweb_parser.py │ │ ├── ffuf_parser.py │ │ └── nikto_parser.py │ ├── correlation.py # cross-references structured findings into │ │ # a ranked attack surface model │ ├── intel/ │ │ ├── mitre_mapping.py # correlation category -> MITRE ATT&CK techniques │ │ ├── cve_lookup.py # queries NVD API for real CVEs, disk-cached │ │ ├── cvss_estimate.py # conservative CVSS fallback when no CVE match │ │ ├── references.py # curated HackTricks/docs links per category │ │ └── enrichment.py # combines CVE+CVSS+confidence+refs per finding │ ├── knowledge/ │ │ └── methodology.py # PTES phases + OWASP context fed to the AI │ ├── ai_advisor.py # calls Claude API over the correlated surface, │ │ # constrained JSON output │ ├── report_data.py # builds one shared report context used by │ │ # all three formatters below │ ├── report_docx.py # session -> DOCX report │ ├── report_pdf.py # session -> PDF report (reportlab) │ └── report_markdown.py # session -> Markdown report ``` ## 为什么采用这种设计(供你的报告/简历参考) - **解析器是确定性的、手写的代码** —— 从工具输出中 提取结构化数据的过程不涉及任何 AI。这部分证明了 你真正理解了这些工具及其输出格式。 - **AI 的职责范围非常狭窄且受限**:在给定的结构化发现 + 方法论上下文下,通过严格的 JSON schema 输出排序后的下一步操作。 这保证了其可靠性,而不是变成一个会产生幻觉的闲聊包装器。 - **会话持久化存储到磁盘**,使得一次测试任务可以在多次 工具运行中积累上下文,这正是真实渗透测试的运作方式(侦测结果 为漏洞分析提供输入,进而为漏洞利用提供输入)。 - **报告生成复用了整个会话日志**,因此报告并不是一个 独立的、需要手动执行的步骤 —— 它是在测试过程中使用该工具的 一个自然产物。 ## 扩展开发 如果你想在此基础上继续构建,以下是一些不错的后续添加项: - 更多解析器:`wpscan`, `sslscan`, Burp Suite XML 导出 - 一个 `session next --focus web` 标志,用于将顾问的输出范围缩小到某一特定类别 - 通过 Ollama 支持本地模型(替换 `ai_advisor.py` 的客户端),实现一个 完全离线 / 零 API 成本的版本 - 基于多次运行结果,为 AI 建议添加一个置信度/误报标志 - 将其封装为 FastAPI 后端 + React 前端,打造一个可供团队使用的 Web 平台,而不仅仅是一个单用户 CLI ## 许可证 MIT — 详情见 [LICENSE](LICENSE)。
标签:逆向工具