开源渗透测试 AI 助手 ComPilot Scan:LangGraph + 终端 + Playwright + 知识库一体化

前言

做渗透测试时,常见痛点是:查资料、跑工具、记笔记、写报告 分散在不同工具里,上下文容易断。大模型能聊天,但如果没有「能执行命令、能搜网、能存结论」的能力,往往只能给方法论,难以真正协作。

ComPilot Scan 是一个面向已授权渗透测试场景的轻量 AI 协作平台:在对话里调用终端、联网搜索、浏览器自动化和知识库,把测试过程沉淀下来。

  • 开源地址:https://gitcode.com/socialman/ComPilotScan
  • 技术栈:FastAPI + Vue 3 + LangGraph ReAct + SQLite
  • 定位:从 ComPilot Platform 精简而来,专注「登录 + 渗透助手 + 知识库 + AI 工具链」

一、它能做什么?

1. 渗透 AI 助手(ReAct)

基于 LangGraph 的 ReAct 智能体,支持:

  • 流式对话(SSE)
  • 工具调用可视化(开始/结束/结果预览)
  • 会话历史与自动压缩(长对话不爆上下文)
  • 系统提示词针对渗透场景定制(合规、知识库、工具使用规范)

2. 知识库

AI 可直接读写,分类包括:

分类 用途
report 测试报告
finding 漏洞发现
target 目标资产
note 测试笔记
general 通用

典型用法:测试阶段性结论 → kb_create 入库 → 后续 kb_search 检索,避免重复劳动。

3. 11 个 AI 工具(核心亮点)

不必为 nmap、sqlmap 各写一个插件,平台提供通用能力层:

工具 能力
terminal_run 沙箱目录执行 Shell(nmap、curl、python 等)
bing_search Bing 联网搜索,模拟浏览器请求
web_fetch 单次抓页,Playwright 渲染 JS 后提取正文
browser 会话级 Playwright:navigate / snapshot / click / fill / press
kb_* 知识库增删改查
get_platform_info 平台能力说明

推荐工作流:

text 复制代码
bing_search(找 CVE/公告)
    → browser.navigate + snapshot(读正文)
    → terminal_run(验证 PoC / 调工具)
    → kb_create(沉淀结论)

4. 基础系统能力

  • JWT 登录、改密、管理员 AI 配置页
  • SQLite 开箱即用,无需复杂部署
  • 生产环境可关闭默认账号、限制默认 admin 登录

二、架构设计

#mermaid-svg-8DgtpYxS8rsHE5zi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8DgtpYxS8rsHE5zi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8DgtpYxS8rsHE5zi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8DgtpYxS8rsHE5zi .error-icon{fill:#552222;}#mermaid-svg-8DgtpYxS8rsHE5zi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8DgtpYxS8rsHE5zi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8DgtpYxS8rsHE5zi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8DgtpYxS8rsHE5zi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8DgtpYxS8rsHE5zi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8DgtpYxS8rsHE5zi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8DgtpYxS8rsHE5zi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8DgtpYxS8rsHE5zi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8DgtpYxS8rsHE5zi .marker.cross{stroke:#333333;}#mermaid-svg-8DgtpYxS8rsHE5zi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8DgtpYxS8rsHE5zi p{margin:0;}#mermaid-svg-8DgtpYxS8rsHE5zi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8DgtpYxS8rsHE5zi .cluster-label text{fill:#333;}#mermaid-svg-8DgtpYxS8rsHE5zi .cluster-label span{color:#333;}#mermaid-svg-8DgtpYxS8rsHE5zi .cluster-label span p{background-color:transparent;}#mermaid-svg-8DgtpYxS8rsHE5zi .label text,#mermaid-svg-8DgtpYxS8rsHE5zi span{fill:#333;color:#333;}#mermaid-svg-8DgtpYxS8rsHE5zi .node rect,#mermaid-svg-8DgtpYxS8rsHE5zi .node circle,#mermaid-svg-8DgtpYxS8rsHE5zi .node ellipse,#mermaid-svg-8DgtpYxS8rsHE5zi .node polygon,#mermaid-svg-8DgtpYxS8rsHE5zi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8DgtpYxS8rsHE5zi .rough-node .label text,#mermaid-svg-8DgtpYxS8rsHE5zi .node .label text,#mermaid-svg-8DgtpYxS8rsHE5zi .image-shape .label,#mermaid-svg-8DgtpYxS8rsHE5zi .icon-shape .label{text-anchor:middle;}#mermaid-svg-8DgtpYxS8rsHE5zi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8DgtpYxS8rsHE5zi .rough-node .label,#mermaid-svg-8DgtpYxS8rsHE5zi .node .label,#mermaid-svg-8DgtpYxS8rsHE5zi .image-shape .label,#mermaid-svg-8DgtpYxS8rsHE5zi .icon-shape .label{text-align:center;}#mermaid-svg-8DgtpYxS8rsHE5zi .node.clickable{cursor:pointer;}#mermaid-svg-8DgtpYxS8rsHE5zi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8DgtpYxS8rsHE5zi .arrowheadPath{fill:#333333;}#mermaid-svg-8DgtpYxS8rsHE5zi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8DgtpYxS8rsHE5zi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8DgtpYxS8rsHE5zi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8DgtpYxS8rsHE5zi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8DgtpYxS8rsHE5zi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8DgtpYxS8rsHE5zi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8DgtpYxS8rsHE5zi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8DgtpYxS8rsHE5zi .cluster text{fill:#333;}#mermaid-svg-8DgtpYxS8rsHE5zi .cluster span{color:#333;}#mermaid-svg-8DgtpYxS8rsHE5zi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8DgtpYxS8rsHE5zi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8DgtpYxS8rsHE5zi rect.text{fill:none;stroke-width:0;}#mermaid-svg-8DgtpYxS8rsHE5zi .icon-shape,#mermaid-svg-8DgtpYxS8rsHE5zi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8DgtpYxS8rsHE5zi .icon-shape p,#mermaid-svg-8DgtpYxS8rsHE5zi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8DgtpYxS8rsHE5zi .icon-shape .label rect,#mermaid-svg-8DgtpYxS8rsHE5zi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8DgtpYxS8rsHE5zi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8DgtpYxS8rsHE5zi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8DgtpYxS8rsHE5zi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 本地存储
AI 工具层
FastAPI
Vue 3 + Element Plus
渗透助手 / 知识库 / AI 配置
REST + SSE Chat
ChatRuntime + LangGraph
chat_tools 工具执行器
terminal_run
bing_search
web_fetch / browser
kb_*
SQLite
知识库表
会话索引
LangGraph Checkpoint
terminal_workspace 沙箱

设计思路:

  1. 工具少而精 :不绑定具体扫描器,用 terminal_run 调用本机 CLI,扩展性更好。
  2. web_fetch vs browser 分工
    • web_fetch:一次性读文章,用完即关;
    • browser:同一会话多步交互(SPA、表单、点击)。
  3. 安全边界
    • 终端:沙箱目录 + 破坏性命令拦截;
    • 联网/浏览器:SSRF 校验,禁止访问内网;
    • 生产:工具开关需显式开启(COMPILOT_*_ENABLED)。

三、5 分钟本地跑起来

环境要求

  • Python 3.10+
  • Node.js 18+
  • 可选:本机已安装 nmap、curl 等渗透工具(供终端工具调用)

安装步骤

bash 复制代码
git clone https://gitcode.com/socialman/ComPilotScan.git
cd ComPilotScan

python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate

pip install -r requirements.txt
playwright install chromium

cp .env.example .env

cd web && npm install && npm run build && cd ..

export JWT_SECRET=dev-secret-change-in-prod
export COMPILOT_ENV=development
export COMPILOT_ALLOW_DEFAULT_ADMIN=true

python -m uvicorn app.main:app --host 127.0.0.1 --port 8000 --reload

浏览器打开:http://127.0.0.1:8000

  • 默认账号:admin / admin123(仅开发环境建议开启)
  • AI 配置:在「AI 配置」页填写 API KeyBase URL(兼容 OpenAI 协议的中转/私有化模型均可)

开发模式(前后端分离热更新)

bash 复制代码
# 终端 1
uvicorn app.main:app --reload

# 终端 2
cd web && npm run dev

四、使用示例(对话指令)

查漏洞情报:

用 Bing 搜索 CVE-2024-3400 官方说明,打开最相关的链接读正文,把要点写入知识库,分类 finding。

调用本地工具:

在终端沙箱里对 example.com 执行 curl -I,把结果保存为 note。

多步浏览器:

用 browser 打开某文档站,给我页面 snapshot,提取安装步骤。

助手会按 ReAct 流程自动选择 bing_searchbrowserkb_create 等工具组合。


五、关键配置说明

.env 中常用项(完整见 .env.example):

bash 复制代码
# 运行模式
COMPILOT_ENV=development

# JWT(生产必改)
JWT_SECRET=your-random-secret-at-least-32-chars

# 生产禁止默认 admin 登录
COMPILOT_ALLOW_DEFAULT_ADMIN=false

# AI(也可在 Web 界面配置)
OPENAI_API_KEY=sk-xxx
OPENAI_BASE_URL=https://api.openai.com/v1

# 工具开关(开发默认开,生产建议显式配置)
# COMPILOT_TERMINAL_ENABLED=true
# COMPILOT_BING_SEARCH_ENABLED=true
# COMPILOT_WEB_FETCH_ENABLED=true
# COMPILOT_BROWSER_ENABLED=true

部署注意:

  • 仓库不包含 dist/,服务器上需执行 cd web && npm run build
  • data/ 含数据库、AI 配置、会话,勿提交 Git
  • Playwright 需执行 playwright install chromium

六、与「只聊天的大模型」差在哪?

对比项 普通 Chat ComPilot Scan
执行 nmap/curl 只能告诉你命令 terminal_run 真实执行
查最新 CVE 训练数据可能过时 bing_search 联网检索
读 JS 渲染页面 不支持 web_fetch / browser
测试结论沉淀 对话关闭即丢失 知识库持久化 + AI 检索
合规边界 依赖提示词 系统提示 + 工具 SSRF/沙箱

它不是 Burp/ZAP 的替代品,而是授权测试过程中的 AI 副驾:帮你查、帮你跑、帮你记。


七、后续规划(可自扩展方向)

  • Docker 一键部署
  • 多用户 / 团队协作
  • 扫描任务队列与结果结构化入库
  • 对接 Burp 导出、Markdown 报告模板

欢迎 Star、Issue 和 PR。


八、合规声明

ComPilot Scan 仅用于已获得书面授权的安全测试。请勿用于未授权目标的探测、攻击或任何违法用途。部署者需自行承担合规责任。


项目链接

相关推荐
工业胶粘剂技术1 小时前
东莞市科耀新材料有限公司工业胶粘剂产品矩阵:电机专用胶、结构胶、三防漆技术选型
人工智能·物联网·矩阵
一只fish1 小时前
Oracle官方文档翻译《Database Concepts 26ai》第21章-Oracle AI 数据库中的AI
数据库·人工智能·oracle
Kobebryant-Manba1 小时前
下载李沐老师动手深度学习源码
人工智能·深度学习
莫宰特1 小时前
NNMind:像搭积木一样设计神经网络
人工智能·python·深度学习·从零训练
极客侃科技1 小时前
能接通飞书的AI主机:联想AI主机Mini适配主流IM办公场景
人工智能·飞书
黎阳之光1 小时前
流域面源污染防控+生态屏障数字化落地:黎阳之光以视频孪生守护南水北调水源安全
人工智能·物联网·算法·安全·数字孪生
Soari1 小时前
GitHub 开源项目解析:microsoft/markitdown —— 面向 LLM 的多格式文档转 Markdown 工具
microsoft·开源·github·markdown·rag
黄啊码1 小时前
【黄啊码】用 AI 聊天?不如用它在高考前多捞分
人工智能
小丶舟1 小时前
微软Build 2026:自研MAI模型+Project Polaris终结OpenAI依赖
人工智能·microsoft·开源