Aymwvn/AI-Assisted-Pentest-Co-Pilot
GitHub: Aymwvn/AI-Assisted-Pentest-Co-Pilot
一款利用 AI 和标准方法论,帮助渗透测试人员分析侦测结果并规划下一步测试动作的辅助工具。
Stars: 0 | Forks: 0
# AI Scanner — AI 辅助的渗透测试 Co-Pilot
[]()
[]()
一款 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)。
标签:逆向工具