用自然语言驱动渗透测试全流程(VulnClaw)
VulnClaw 是一个用 Python 写的开源 AI 渗透测试命令行工具,输入一句自然语言描述的目标,模型会自动跑完信息收集、漏洞发现、漏洞利用和报告生成。这篇解读按五分钟跑通的顺序讲清安装、配置、常用命令、报告落在哪里,并整理真实 Issue 里暴露的问题和同类项目对照,帮你判断它是否适合自己的授权测试场景。
做一次 Web 渗透测试要在好几样工具之间来回倒手:先 nmap 扫端口,再翻目录、认指纹,接着拿 payload 一个个试,最后还得把过程整理成报告。单看每一步都不复杂,麻烦的是结论要在工具之间靠人搬运,搬的过程里容易漏线索,事后也很难复现。
VulnClaw 是用 Python 写的 AI 渗透测试 CLI,你把目标用一句自然语言说清楚,模型会驱动工具链跑完信息收集、漏洞发现、漏洞利用与报告生成。
输入是一个目标地址加一句人话,比如「对 http://target.example.com 进行渗透测试」;输出是一份结构化 Markdown 报告和可单独运行的 Python PoC 脚本。它面向已经拿到授权的安全工程师、打 CTF 的选手,以及需要给学生演示完整攻击链的教学人员。仓库地址是 https://github.com/Netw0rkNoob/VulnClaw ,采用 MIT 许可证,主要语言为 Python(占比 85.5%,另有 Rust 7.4% 与 TypeScript 4.7%),当前 3483 star、479 fork、开放 Issue 8 个。
五分钟先跑通
从 PyPI 装是最短路径:
pip install vulnclaw
要从源码装就多两步:
git clone https://github.com/Netw0rkNoob/VulnClaw.git
cd VulnClaw
pip install -e .
装完走官方给的四步启动流程。
# 1. 选择提供商,会自动填充 Base URL 和模型名
vulnclaw config provider minimax
# 2. 设置 API Key
vulnclaw config set llm.api_key sk-your-key-here
# 3. 默认打开原 CLI / REPL
vulnclaw
# 4. 可选:打开 TUI 工作台
vulnclaw tui
provider 的可选值包括 openai、anthropic、deepseek、zhipu、moonshot、qwen、siliconflow、ollama 等,一共 14 家。不想用 API Key 也可以执行 vulnclaw login 走 ChatGPT 订阅登录,README 里对这一做法标注了 ToS 风险。
正式开扫之前先做一次环境体检:
vulnclaw doctor
它会打印 Python 版本、Node.js、npx、nmap 是否就绪,以及当前 LLM 配置与各 MCP 服务的启用状态。
不想在宿主机装 Python 环境可以用 Docker,镜像里已经带了 Web UI 和默认 MCP 服务所需的 npx / uvx,所有状态持久化到 /data 数据卷:
cp .env.example .env # 填入 VULNCLAW_LLM_API_KEY 等
docker compose up --build
起来后打开 http://127.0.0.1:7788 就是 Web 界面。容器里的 localhost 指向容器自身,要扫宿主机上的服务得改用 host.docker.internal,扫其它容器需要共享网络再按容器名访问,这一点在 DOCKER.md 里有说明。
跑通之后你会得到什么
一轮渗透跑完,VulnClaw 会在 ./reports/ 目录下生成结构化 Markdown 报告,文件名形如 192.168.1.100_20260418.md,同时产出可独立执行的 Python PoC 脚本。报告按阶段组织,能看到开放端口、Web 指纹、命中的 CVE 和漏洞验证结果。
原始证据落在 evidence/traffic/ 目录。流量按运行内作用域过滤后写成追加式 JSONL 索引,每个请求的原始报文单独落盘,之后可以用 traffic_list / traffic_view / traffic_repeat / traffic_sitemap 这几个工具回查和重放,不用重新发包。
拿到报告之后有三条路可以接着走:用 vulnclaw report <session> 从会话 JSON 重新生成报告;回到 TUI 工作台继续下一轮;或者把报告和 PoC 交给修复方走加固流程。持续性模式还会按周期自动出报告。
主要功能
模型主导的求解引擎。默认走 solve 引擎,类似 Claude Code / Codex 的自主循环,由模型自己决定下一步做什么、什么时候调工具、什么时候判定无路可走。入口命令是 vulnclaw solve <target>,也可以带上目标,例如 vulnclaw solve target.com --goal "拿到flag"。
多 LLM Provider 切换。内置 14 家兼容模型,一条 vulnclaw config provider <name> 就能切换,也可以用 vulnclaw config set llm.base_url 和 llm.model 指向自建服务。限制是必须至少配一个能用的密钥,或者走登录模式。
MCP 工具链。一共 4 个 MCP 服务:fetch 和 memory 是本地实现,开箱即用;chrome-devtools 和 burp 需要对接外部 MCP 服务,分别提供浏览器自动化和 HTTP 抓包重放。后两个不是装完就能用,得自己把对应的 MCP 服务跑起来。
AgentState 证据记忆。工具结果统一写进 AgentState.evidence,raw 原文完整保留,活动上下文默认只注入高信号预览,需要原始内容时用 evidence_search / evidence_view 回查。冷热记忆分离,热上下文默认 48 条 / 32K token,超出的部分自动归档到冷记忆 JSONL 分片,由 memory_search 按需检索。
证据级反幻觉闸门。模型声称的 flag 或结论必须在真实工具输出里逐字符出现才会被采信,避免凭空编造 flag 造成的假胜利。另有 NO_PATH 闸门,当源码 sink、表单参数、请求面、本地 proof 或响应差异这些高信号还没耗尽时,不接受模型因单次 payload 没回显就提前判死。
专项 Skill 库。内置 50 个 Skill,覆盖 CTF、Web、内网、逆向、漏洞验证和授权红队知识库。Skill 只作为参考资料索引暴露给模型,正文要模型主动调用 load_skill_reference 按需读取,不再作为强制剧本注入上下文。
漏洞检测插件体系。低耦合的插件运行时加内置只读 Web 插件,结果自动汇入报告链路。用 vulnclaw plugins list 列插件(可加 --stage discovery 过滤),vulnclaw plugins info <id> 看元信息,vulnclaw plugins run <id> 运行,运行时只分析传入的数据,例如 --input headers.json。
本地源码扫描。这条不需要网络目标,命令是 vulnclaw code scan <path>,分 L1 正则、L2 结构、L3 LLM 三层,可以用 --format sarif 输出 SARIF 格式给别的工具消费。
若干内置执行工具。编解码与加解密共 29 种操作(Base64、Hex、URL、AES、JWT、Morse 等);shell_command 用于 php -r 反序列化验证、curl 精确请求、rg 文件检索这类本地调试;http_probe_batch 一次比较多组 URL、参数、header、body 变体;runtime_diff_probe 处理过滤器与运行时解析器不一致的场景;python_execute 适合构造 payload 和解析响应。README 明确写了 python_execute 属于高风险实验能力,不应视为强隔离沙箱。
多种界面与持续模式。默认 CLI / REPL,vulnclaw tui 打开 Rust ratatui 写的终端工作台,vulnclaw web 启动本地 Web UI(默认 127.0.0.1:7788),vulnclaw persistent <target> 走持续渗透,默认 100 轮一个周期、共 10 个周期即 1000 轮,每周期自动出报告。
常用参数与配置
配置项走 vulnclaw config 这一组子命令。config provider <name> 切提供商,config set <key> <value> 写值,config get 与 config list 读值。最常改的三个键是 llm.api_key、llm.base_url、llm.model,第三方 API 就靠后两个指过去。
阶段命令可以单独跑:vulnclaw recon <target> 只做信息收集不碰漏洞,vulnclaw scan <target> --ports 80,443 做扫描阶段,vulnclaw exploit <target> --cve CVE-2024-1234 做利用阶段。vulnclaw run <target> 是一键全流程,默认走 solve 引擎。
作用域约束用 allowed_hosts 配置项。Issue 里出现过尾部点号导致所有 fetch 请求被 scope 检查误拒的情况,写域名时不要带多余的尾点。TUI 里的 /scope 动作约束会以表格弹窗形式出现,状态可以持久化到 config.yaml。
界面语言用 /language 命令实时切换,中英文都有 41 个以上的翻译键。推理过程的显示用 think on / think off 切换,想只看结论就关掉。
模型相关的还有子 Agent 扇出:spawn_subagents 工具让主模型在一轮内并发探索多个独立攻击方向,子证据合并回父状态后统一重分配 eNNN 编号,带完整生命周期预算和安全上限,max_depth 硬顶为 2。
结果在哪里看
终端是最直接的出口。CLI 会按 Round 打印阶段进展,TUI 里另有一个子代理实时监控面板,用私有 JSON 行协议展示每个子代理的角色、状态、步数和进展,每个子代理有独立 run_id 和事件 token,避免旧 worker 的数据污染当前视图。
落盘结果分两处。结构化报告在 ./reports/ 目录,Markdown 格式,文件名带目标与日期。原始证据在 evidence/traffic/ 目录,JSONL 索引加每请求原始报文。用 vulnclaw report <session> 可以从会话 JSON 重新生成一份报告。
Web UI 在 127.0.0.1:7788,用 vulnclaw web 启动。vulnclaw code scan 加上 --format sarif 时会输出 SARIF 文件,方便接进已有的代码扫描流水线。
实际使用中的坑
报告误判为未发现有效漏洞(待解决)。有用户报告渗透已经成功、verified=0 / exit=0 的情况下,报告仍被判定为没找到有效漏洞。复现环境是 vulnclaw 0.3.6(PyPI)和 0.3.7(GitHub release wheel),模型用的是 DeepSeek v4,pro 和 flash 两个版本都能复现,平台为 WSL2 / Ubuntu 22.04、Python 3.11。这个 Issue 目前仍是开放状态,对结果准确性要求高的场景,报告出来后建议人工复核一遍证据。
初始化失败(待解决)。另一个未关闭的 Bug 报告显示,输入授权目标后进入自主渗透模式时初始化会失败,终端停在 AUTO 模式提示上。这个 Issue 评论数不多,还没有明确的修复方案。
allowed_hosts 尾点导致 scope 误拒(已解决)。用 vulnclaw run http://<target> 这种带 scheme 前缀的 URL 启动时,allowed_hosts 里如果带了尾部点号,所有 fetch 请求会被作用域检查拒绝,渗透流程陷入死锁。该问题已修复。
MCP 工具调用崩溃(已解决)。任何发往 chrome-devtools、burp 或自定义 stdio/SSE 接入的 MCP 服务的工具调用,都曾抛出 TypeError: unsupported operand type(s) for +: 'float' and 'datetime.timedelta'。属于工具调用链里的类型错误,现已解决。
从 Issue 清单看,另一个还没有落地的是「动态注入提示词」功能请求,用户希望能在运行中给模型补充新提示或纠正思考方向,目前只是需求,没有实现。
选型参考
下面三个都是自主渗透测试方向的 AI Agent 工具,放在一起是为了看清各自的位置,不是推荐顺序。
| 项目 | 适合谁 | 部署方式 | 主要限制 | 什么情况下选它更合适 | 项目地址 |
|---|---|---|---|---|---|
| VulnClaw | 已经拿到授权、希望把「收集 → 发现 → 利用 → 报告」串成一条链的安全工程师和 CTF 选手 | pip 安装或 Docker Compose,需自备 LLM API Key | chrome-devtools / burp 依赖外部 MCP 服务;python_execute 明确不是强隔离沙箱;开放 Issue 里仍有报告误判问题 | 团队以中文为主、需要中文 TUI 与完整报告链路时 | VulnClaw |
| vxcontrol/pentagi | 需要多 AI Agent 编排、并参考大量外部资料的渗透测试团队 | 仓库没有说明 | 未逐一核实 | 选型更看重社区规模与外部资料积累时 | pentagi |
| SanMuzZzZz/LuaN1aoAgent | 想要一个全自主渗透 Agent 起点、自己再往上加东西的研究者 | 仓库没有说明 | 未逐一核实 | 需要一个更轻量的自主 Agent 底座做二次开发时 | LuaN1aoAgent |
三者都做自主渗透这一件事,但取舍点不同。VulnClaw 的短板在于社区规模:3483 star 对比 pentagi 的 25217 star,可参考的外部资料和踩坑记录少得多,遇到问题时能搜到的东西有限。另外它的浏览器自动化与抓包重放要靠自己部署外部 MCP 服务,装完并不直接可用。如果你需要开箱即用的浏览器自动化、或者希望问题一搜就有答案,先去看 pentagi 这类积累更久的项目更划算。
合规红线
VulnClaw 是做扫描、探测、漏洞利用的工具,只能用于你自己拥有或已经获得书面授权的目标。对未授权系统发起扫描和利用,在国内可能触及《网络安全法》与《刑法》相关条款,在境外也会违反当地法律,同时可能触发云厂商和托管平台的封禁与追责。
CTF 靶场、公司内部授权的红队演练、明确写了许可范围的教学环境属于合规用途,公用网络上的任意域名和 IP 不属于。跑之前把授权范围写进 allowed_hosts,既是技术约束也是留痕。
什么情况下别用它
手上没有明确授权的目标时,不要用。这是使用前提,不是建议。
只需要纯扫描、不需要模型参与判断的场景,用传统扫描器更省事。VulnClaw 的整条链路围绕 LLM 展开,每一轮都要调模型,成本和耗时都比单纯跑一次端口扫描高。
目标信息不能外发给第三方模型服务时,不要用云端 Provider。默认路径是把目标信息送进 LLM API,要走本地推理得自己配 Ollama 这类本地 provider。
需要执行来源不可信的 payload 时,不要指望它做隔离。README 明确写了 python_execute 目前仍属高风险实验能力,不应视为强隔离沙箱,这类活儿要放到独立的隔离环境里。
对报告准确性要求极高、且没有人工复核环节的流程,暂时不要把它当作唯一来源。开放 Issue 里那条「渗透成功后报告误判为未发现有效漏洞」还没有关闭状态。
焚评:这个项目的量化评分
本项目的选题来自 焚.com(一个按公开公式给 GitHub 项目打分的站)。焚评当前总分 9.6 分(满分 10)。下表是各维度的得分:
| 评分维度 | 得分 |
|---|---|
| 热度动量(权重 25%) | 10.0 / 10 |
| 开发活跃(权重 25%) | 8.7 / 10 |
| 社区响应(权重 15%) | 10.0 / 10 |
| 文档质量(权重 15%) | 10.0 / 10 |
| 发布节奏(权重 10%) | 9.0 / 10 |
| 风险控制(权重 10%) | 10.0 / 10 |
评分口径、权重与计算方式见焚.com 的评分方法页;数据随 GitHub 指标刷新,具体数值以焚.com 当前页面为准。本文正文为诀.com 独立撰写,评分数据由焚.com 授权引用。
内容核验说明
这篇的价值在把安装、配置、命令和报告落点按能跑通的顺序排清楚,并列出未关闭的两个 Bug、外部 MCP 的自部署门槛,选型时能直接对照。适合已拿到授权、想评估自主渗透 Agent 的安全工程师和 CTF 选手。
仓库指标(star、fork、Issue 数、语言占比)与焚评评分来自原作者和焚.com 的公开披露,诀.com 未独立验证;安装命令、配置项与报告路径出自项目 README;所引 Issue 来自仓库公开记录,未做本地复现。工作流类结论不保证在其它环境复现。用户反馈摘要
根据仓库 Issue 来看,讨论集中在改进与缺陷两侧。改进诉求有中文切换、补英文文档、README 加 Star History 图表;功能上有人希望运行中动态注入提示词,该问题状态为待解决。Bug 报告里,渗透成功后报告仍被判为未发现有效漏洞、初始化报 proxies 参数错误,两条均为待解决;allowed_hosts 尾点误拒 scope、MCP 调用崩溃等已修复。另有提交者问参考 Cairn 是否应说明、CI 硬编码如何合并。
基于该仓库公开 Issue 整理,只反映提交者报告的现象与诉求,不代表诀.com 立场,也不代表问题已被确认。项目来源与说明
开源项目:Netw0rkNoob(Netw0rkNoob)
本文由诀.com 编辑基于该项目的公开信息独立撰写,属原创解读,不是对项目文档的翻译或转载;文中提到的功能与参数以官方仓库为准,代码与文档版权归原作者所有。
查看项目仓库