基于 AI 代理 + MCP 工具链 + 渗透技能编排,结合大语言模型,实现自然语言输入 → 自动完成「信息收集 → 漏洞发现 → 漏洞利用 → 报告生成」全流程。
基于 AI 代理 + MCP 工具链 + 渗透技能编排,结合大语言模型,实现自然语言输入 → 自动完成「信息收集 → 漏洞发现 → 漏洞利用 → 报告生成」全流程。
输入自然语言,AI 自动执行渗透测试全流程:
用户输入:帮我对 http://target.example.com 进行渗透测试
VulnClaw 自动执行:
Round 1: 信息收集 → 指纹识别、端口扫描、目录枚举
Round 2: 漏洞发现 → 检测注入点、已知 CVE、配置缺陷
Round 3: 漏洞利用 → PoC 验证、权限获取
Round 4: 报告生成 → 结构化报告 + Python PoC 脚本
适用于已授权的渗透测试、CTF 竞赛、安全教学、红队演练等场景。
AgentState.evidence,raw 原文完整保留;active context 默认只注入高信号预览,evidence_search / evidence_view 用于按需回查原始证据fetch / memory 本地实现开箱即用,chrome-devtools / burp 对接外部 MCP 服务实现浏览器自动化和 HTTP 抓包重放evidence/traffic/,内置 traffic_list / traffic_view / traffic_repeat / traffic_sitemap 工具直接读写vulnclaw plugins)load_skill_reference 按需读取,不再作为强制剧本注入上下文fetch / http_probe_batch 遇到 highlight_file、HTML 高亮源码或混杂 HTML/JS body 时会自动在 raw body 前追加 clean source;http_probe_batch 默认关闭 TLS 校验并记录完整响应头,避免丢失 X-Powered-By 等运行时证据;内置 source_extract 仍可用于按需重读历史 evidence,并固定危险 sink、表单与 endpoint 信号shell_command,用于 php -r 反序列化验证、curl 精确请求、rg/Select-String 文件检索等 Codex-style 本地调试场景;raw stdout/stderr 完整写入 evidence,大输出进入模型时使用高信号预览runtime_diff_probe,用于正则/字符串过滤器与运行时解析器不一致的场景,帮助模型批量生成并验证“过滤器漏过、解析器接受”的候选;PHP 序列化模式会提示目标/本地运行时版本差异,并把 PHP5 signed length 候选标记为必须远程验证,避免被本地新版 PHP 误杀python_execute 工具,适合 payload 构造和响应解析;当前仍属高风险实验能力,不应视为强隔离沙箱http_probe_batch,用于一次比较多组 URL/参数/header/body/raw URL 变体,默认返回每个响应的完整 body,并在模型可见输出中展示实际请求面(method、URL、params、headers、cookies、body/json),减少重复 LLM 轮次和手写请求代码NO_PATH 闸门:当源码 sink、表单/参数、请求面、本地 proof 或响应差异等高信号尚未耗尽时,不接受模型因单次 payload 无回显/远端 same-body 就提前判死think on/off 一键切换 LLM 思考过程的显示/隐藏vulnclaw web 启动本地 Web 界面,默认 127.0.0.1:7788# 从 PyPI 安装(推荐)
pip install vulnclaw
# 从源码安装
git clone https://github.com/Netw0rkNoob/VulnClaw.git
cd VulnClaw
pip install -e .
镜像已内置 Web UI 以及默认 MCP 服务所需的运行时(npx / uvx),所有状态持久化到 /data 数据卷。
cp .env.example .env # 填入 VULNCLAW_LLM_API_KEY 等
docker compose up --build # 构建镜像并启动 Web UI
# 打开 http://127.0.0.1:7788
也可用纯 docker 运行某条 CLI 命令:
docker run --rm -it \
-e VULNCLAW_LLM_API_KEY=sk-your-key-here \
-v vulnclaw-data:/data \
vulnclaw:latest scan <target>
⚠️ 容器内的
localhost指向容器自身。扫描宿主机服务请使用host.docker.internal,扫描其它容器请共享网络并用容器名访问。详见 DOCKER.md。
# 1. 选择提供商(自动填充 Base URL 和模型名)
vulnclaw config provider minimax (或 openai/anthropic/deepseek/zhipu/moonshot/qwen/siliconflow/ollama)
# 1.2(可选)自定义 Base URL 或模型名
vulnclaw config set llm.base_url https://your-own-api.example.com/v1
vulnclaw config set llm.model your-model-name
# 2. 设置 API Key
vulnclaw config set llm.api_key sk-your-key-here
# — 或改用 ChatGPT 订阅登录(无需 API Key):
# vulnclaw login (浏览器登录;注意 ToS 风险)
# 3. 默认:打开原 CLI / REPL
vulnclaw
# 4. 可选:打开 TUI 工作台
vulnclaw tui
vulnclaw doctor
输出示例:
VulnClaw 环境检查
Python: 3.14.4
Node.js: v24.14.1
npx: 已安装
nmap: 已安装
LLM 配置:
Provider: openai
Auth Mode: static
Credentials: configured
Base URL: https://api.openai.com/v1
Model: gpt-4o
MCP 服务:
fetch: 已启用 [P0]
memory: 已启用 [P0]
...
✅ 环境就绪,运行 vulnclaw 开始
…
命令
说明
示例
vulnclaw
默认打开原 CLI / REPL
vulnclaw
vulnclaw tui
终端图形化工作台
vulnclaw tui --target target.com
vulnclaw repl
启动经典 REPL 交互界面
vulnclaw repl
vulnclaw solve <target>
目标驱动求解(无固定轮数,拿到目标即停)
vulnclaw solve target.com --goal "拿到flag"
vulnclaw run <target>
一键全流程渗透(默认走 solve 引擎)
vulnclaw run 192.168.1.1
vulnclaw persistent <target>
持续性渗透(100轮/周期)
vulnclaw persistent 192.168.1.1
vulnclaw recon <target>
仅信息收集(不利用漏洞)
vulnclaw recon target.com
vulnclaw scan <target>
漏洞扫描阶段
vulnclaw scan target.com --ports 80,443
vulnclaw exploit <target>
漏洞利用阶段
vulnclaw exploit target.com --cve CVE-2024-1234
vulnclaw report <session>
从会话 JSON 生成报告
vulnclaw report session_xxx.json
vulnclaw config set <key> <value>
设置配置项
vulnclaw config set llm.api_key sk-xxx
vulnclaw config provider <name>
切换 LLM 提供商
vulnclaw config provider minimax
vulnclaw plugins list
列出漏洞检测插件
vulnclaw plugins list --stage discovery
vulnclaw plugins info <id>
查看插件元信息
vulnclaw plugins info builtin.web.headers
vulnclaw plugins run <id>
运行插件(仅分析传入数据)
vulnclaw plugins run builtin.web.headers --input headers.json
vulnclaw code scan <path>
本地源码安全扫描(L1 正则 / L2 结构 / L3 LLM 可选)
vulnclaw code scan ./src --format sarif
vulnclaw
无参数启动会进入 交互界面,用自然语言对话:
vulnclaw> 对 192.168.1.100 进行渗透测试,这是我授权的靶场
[*] 进入自主渗透模式,按 Ctrl+C 可随时中断
── Round 1 ──
[+] 目标: 192.168.1.100
[+] 开放端口: 22, 80, 443, 8080
[+] Web 指纹: Apache/2.4.62
── Round 2 ──
[+] 发现 /manager/html (Tomcat Manager)
[+] 命中 CVE-202X-XXXX: Apache Tomcat 认证绕过
── Round 3 ──
[+] 漏洞验证成功
192.168.1.100 | 报告> 生成渗透报告
[+] 报告已保存: ./reports/192.168.1.100_20260418.md
[+] PoC 脚本已保存: ./pocs/CVE-202X-XXXX.py
REPL 内置命令:
命令 说明target <host>
设置渗透测试目标
status
查看当前状态
tools
列出当前可用 MCP 工具
think on/off
切换推理过程显示
mode [模式]
查看或切换执行审批模式(ask / auto_review / full_access)
persistent
启动持续性渗透测试
clear
清空当前会话
help
显示帮助信息
exit / quit / q
退出
自动渗透触发: 输入包含「渗透测试」「找 flag」「爆破」等关键词 + 目标地址时,自动进入多轮自主渗透循环。Ctrl+C 随时中断。
可选的终端图形化工作台,展示授权目标、检查模式、运行概览、安全边界,让用户先确认范围再启动任务。
vulnclaw tui
vulnclaw tui --target https://target.example --mode quick --only-port 443
vulnclaw tui --dry-run --target https://target.example --mode deep --only-path /admin
Rust TUI 工作台支持可配置容器布局:左侧默认显示状态,右侧同时显示发现与子代理;中间显示代理输出,底部为输入框。子代理视图目前显示无数据提示。
v / > 折叠或展开。Ctrl+←/→ 切换视图,Ctrl+Y 复制当前视图。VULNCLAW_HOME/tui/layout.json(默认 ~/.vulnclaw/tui/layout.json),下次启动恢复。底栏随命令面板自动增高;终端过小时提示所需尺寸,放大后恢复布局。鼠标捕获开启时,终端原生文字选择取决于终端提供的修饰键;复制单个视图可使用 Ctrl+Y。
常用菜单:
vulnclaw doctor)vulnclaw run 192.168.1.100 # 一键全流程
vulnclaw recon 192.168.1.100 # 仅信息收集
vulnclaw scan 192.168.1.100 --ports 80,443 # 漏洞扫描
vulnclaw exploit 192.168.1.100 --cve CVE-2024-1234 --cmd id # 漏洞利用
vulnclaw report session.json # 生成报告
适用于需要长时间深度渗透的场景,以周期循环方式运行:
┌──────────────────────────────────────────────┐
│ Cycle 1 (100轮) → 自动报告 → 继续 │
│ Cycle 2 (100轮) → 自动报告 → 继续 │
│ ... │
│ 直到 Ctrl+C 或达到最大周期数(默认10) │
└──────────────────────────────────────────────┘
vulnclaw persistent 192.168.1.100 # 默认 100轮/周期 × 10周期
vulnclaw persistent 192.168.1.100 -r 200 -c 5 # 200轮/周期 × 5周期
vulnclaw persistent 192.168.1.100 --no-report # 不自动生成报告
# TUI 方式
vulnclaw tui --target 192.168.1.100 --mode continuous
# REPL 方式
vulnclaw> persistent 192.168.1.100
特点: 跨周期状态保持 / 周期报告 / 灵活中断 / 增量发现 / 可配置
通过浏览器操作渗透测试全流程。
git clone https://github.com/Netw0rkNoob/VulnClaw.git
cd VulnClaw
pip install -e '.[web]' # 从源码检出安装 Web 依赖
# 首次使用:构建 React 前端(需要 Node.js 18+)
cd frontend
npm install
npm run build
cd ..
vulnclaw web # 启动(默认 127.0.0.1:7788)
vulnclaw web --port 8080 # 自定义端口
PyPI wheel 不包含 React 构建产物或前端源码;完整 Web UI 需要按上面的源码方式安装。
若浏览器显示 Fallback Web Shell(无完整扫描界面),说明缺少
frontend/dist/index.html。按上式构建后重启 vulnclaw web 并强制刷新。
未构建前端时,/api/health 等 API 仍可用。
⚠️ 默认仅绑定本地回环地址。如需远程访问须显式指定
--host 0.0.0.0 --allow-remote。
VulnClaw 默认使用模型主导 solve 引擎(旧版固定轮数引擎可通过 vulnclaw config set session.engine rounds 回退)。
模型主导循环: 框架不再把任务拆成固定“研究方向”,也不再按阶段模板主动安排目录扫描、JS 收集或 SQLi 测试。solve 只给模型提供目标、历史上下文、证据记忆和可用工具清单,由模型自己决定下一步行动。
原语 含义 模型上下文 目标、用户约束、近期消息、证据摘要和已执行工具调用 工具清单fetch / 浏览器 / 目录枚举 / JS 收集 / 编解码 / Python / shell_command / source_extract / runtime_diff_probe / skill 读取等能力,仅作为可选手脚暴露给模型
工具 transcript
工具调用后会把 assistant tool_calls 与 role=tool 观察结果追加进模型上下文;大输出使用高信号预览,避免 HTML/body/日志反复污染 active context
AgentState 证据
每个真实工具结果都会写入 AgentState.evidence;raw 原文完整保留并带 hash/size/证据号,模型可通过 evidence_search / evidence_view 按需回查
高信号记忆
源码 SQL、HTML 表单/input、PHP/API 链接、JavaScript endpoint、highlight_file 源码、unserialize/魔术方法/危险 sink 会被固定为长期可见事实,避免后续探测把真实入口淹没
轻量纠偏层
只观察工具生命周期,记录耗时、失败降级、重复调用、高信号目标事实和小步语义差异,作为提示信号注入下一轮上下文,不做阶段规划、不主动安排工具
证据闸门
FINAL: 结论必须引用或命中真实证据;未被工具输出支撑的 flag/结论会被拒绝并继续探索
自动复盘报告
目标达成后自动生成 Markdown 报告,包含解题思路、关键证据、复现请求包、curl、响应片段和证据索引
MODEL DECIDES → 可选工具调用 → AgentState 记录完整 raw evidence + active context 高信号预览 + 轻量纠偏信号
│
继续推理 / 继续调用工具 / ASK_USER / NO_PATH / FINAL
│
FINAL 经过证据闸门校验 → 通过才结束,否则把拒绝原因返回模型继续做
上下文策略: solve 默认保留正常对话历史,不主动压缩。只有模型上下文接近上限、用户执行 /compact 或显式启用自动压缩时才压缩。工具输出会完整写入 AgentState.evidence,但大输出进入 active context 时只注入 bounded high-signal preview,包含状态、响应头/请求面、表单/参数、endpoint、源码 sink/filter、flag-like token、关键行号、raw size 和 hash;完整 body/stdout/stderr 可通过 evidence_search 搜索或 evidence_view 分页回看。fetch / http_probe_batch 的 max_body_chars、python_execute_max_output_chars 和 shell_command.max_output_chars 只有显式设为正数时才会在工具层裁剪 raw 输出;未显式裁剪时 raw evidence 仍完整保留。相同 raw 输出再次出现时,active context 只保留 same_as=eXXX 引用,不重复塞正文。终端回显只是人类显示层:长工具结果默认折叠为预览,完整内容保存在 evidence。从原始输出里提取出的高信号事实会独立固定,包括表单、参数、JS endpoint、PHP/API 链接、highlight_file 源码、危险 sink、请求面、same-body/响应差异和本地 proof 片段。evidence_list / evidence_search / evidence_view 用于回看历史证据,重复查看同一 evidence 覆盖范围会被短路,连续多轮只翻证据且没有新 evidence 会触发 stall guard,要求下一步改用非 evidence 工具、FINAL、ASK_USER 或 NO_PATH。工具调用执行后不会再强制追加一轮 Summarizing... LLM 调用;正常路径采用 Chat Completions 原生工具 transcript(assistant tool_calls + role=tool),让下一次模型采样基于真实观察继续。
证据级反幻觉闸门: 录制所有真实工具输出作为唯一可信证据。声称的 flag/结论必须在真实输出里逐字符出现或显式引用证据编号才会被采信,杜绝凭空编造。NO_PATH 也受近成功闸门约束:当证据中仍有未耗尽的高信号锚点时,会先把拒绝原因反馈给模型继续验证,而不是直接停止。
自动复盘报告: solve 达成目标后会基于 AgentState 确定性生成 Markdown 复盘报告并默认打印到终端。报告不会额外请求 LLM;复现请求包、curl 和响应片段来自真实 fetch / http_probe_batch evidence。
授权红队 Skill: codex-redteam-mode 的授权红队 detail packs 已作为 skill/知识库导入,供模型按需读取;jailbreak、拒绝绕过、会话 patch 等破限内容未导入。
| 模块 | 文件 | 说明 | |-----
暂无开放 Issues,或尚未同步最近议题。