目录

VulnClaw:从「固定轮数循环」到「目标驱动求解」的 AI 渗透测试 Agent

它在解决什么具体问题

AI 类渗透工具最近一年最大的痛点不是"能不能跑",而是跑起来后会陷入循环——弱模型经常在同一页面反复请求、嘴上说要测注入但不发请求包,或者反过来:擅自猜到下一步发现了什么 flag,但工具输出里其实根本没有那段字符串。Unclecheng-li/VulnClaw(v0.3.x)的 README 把这两类问题都列成了"必须修"的设计目标,并在 0.3 系列做了底层引擎重构。

它的目标读者很明确:安全研究员、CTF 选手、红队/授权渗透工程师,安全教学场景。它面向黑灰产,所有功能都内置了"授权范围"提示词与白名单前置检查。

关键能力一览(v0.3.x)

README 给的特性列表很长,先做一份按维度分类的清单:

  • 求解引擎:默认引擎 solve——把渗透建模成黑板图(blackboard graph,多子系统共享事实池的协作搜索结构)+ OODA(Observe–Orient–Decide–Act,观察—判断—决策—行动)循环,三类终止条件:目标达成 / 探索前沿耗尽 / 安全预算耗尽;
  • 反幻觉闸门:任何 flag 与结论必须在真实工具输出里逐字符出现才能被采信,杜绝"自己脑子编出来的胜利";
  • LLM Provider 适配层:内置 13 个 provider,OpenAI / Anthropic / DeepSeek / 智谱 / Moonshot / 千问 / SiliconFlow / 豆包 / 百川 / 阶跃星辰 / 商汤 / 零一万物等,全部走 OpenAI 兼容协议;
  • MCP 工具链:4 个 MCP(Model Context Protocol,模型上下文协议)服务——fetchmemory 由 VulnClaw 本地实现,chrome-devtoolsburp 通过外部 MCP 服务对接实现浏览器自动化和 HTTP 抓包重放;
  • 21 个内置 Skill:7 个核心 Skill + 14 个专项 Skill(含 CTF Web/Crypto/Misc、osint-recon、secknowledge-skill),含 180 个参考文档;
  • 29 个编解码/加解密工具:Base64/Hex/URL/AES/JWT/Morse 等,让 LLM 不再靠猜;
  • Python 代码执行工具 python_execute:用于 payload 构造和响应解析(README 明确标注属于"高风险实验能力",不能视作强隔离沙箱);
  • 持续性渗透:默认 100 轮/周期 × 10 周期 = 1000 轮,每周期自动生成报告;
  • Web UI 模式vulnclaw web 起本地 Web 界面,默认 127.0.0.1:7788,浏览器端操作全流程;
  • 漏洞检测插件体系:低耦合插件运行时,内置只读 Web 插件,结果自动汇入报告链路(vulnclaw plugins)。

v0.3 求解引擎:黑板图 + OODA

这是 README “为什么值得升级"的核心叙事。旧引擎是固定轮数循环,N 轮跑完强制结束;新引擎改为目标驱动,结构上分两块:

黑板图(事实池)

  • Fact:渗透过程中已确认的事实,含原文回执与可信度评分;
  • Intent:由当前事实派生出来的"接下来想验证什么"列表;
  • 求解器读黑板图,决定下一步动作。

OODA 循环

  1. Observe:消费最近一次工具输出,更新 Fact;
  2. Orient:将 Fact 投影到 Intent 集合;
  3. Decide:挑一个 Intent,调起对应工具;
  4. Act:执行工具,把新 Fact 写回黑板图。

这套结构和 ReAct / Plan-and-Execute 最大的区别在于:状态显式化——LLM 不再独立维护"我现在知道什么”,而是从黑板图里读;不再独立维护"我下一步要试什么",而是每次决策前显式生成 Intent 列表再选。这种结构对"防止原地打转"非常有效。

证据级反幻觉闸门

README 用一段很形象的对比说明这一点:

如果 LLM 说 “flag{…}” 必须能在某次真实工具输出里逐字符找到这段字符串,否则判为假胜利,拒绝写入报告。

实现层面是把每个"声明"和"输出"做精确字符串匹配 + 上下文窗口校验;匹配失败的 Fact 会被标记为 disputed,后续目标判定不允许依赖这个 Fact。这对 CTF 场景尤其重要:弱模型经常在第 12 轮忽然宣称"我找到了 flag"——这种自欺性胜利在 v0.3 里会被直接拆穿。

安装与起步

# PyPI 安装
pip install vulnclaw

# 启动(CLI)
vulnclaw        # 默认启用 solve 引擎
vulnclaw web    # 起 Web UI,浏览器端操作

# 列出插件 / Skill
vulnclaw plugins
vulnclaw skills

LLM Provider 通过环境变量或 .env 配置 API Key,provider 切换不需要改代码。MCP 服务需要本地安装 fetch / memory(默认自带);如要用 chrome-devtoolsburp,需要单独跑这两个 MCP server。

适用与边界

适用

  • 拿到一份授权范围,需要在有限轮次内把活儿干完;
  • CTF 场景中希望引擎稳定停在"找到 flag"那一刻,而不是继续无谓探测;
  • 想把渗透过程结构化沉淀成 Markdown 报告 + Python PoC;
  • 团队里有人写代码、有人不写代码,需要 CLI + Web UI 双入口。

不适用 / 风险

  • 未授权的真实网络(README 文首明确"仅限授权范围",本文不赘述合规边界);
  • python_execute 当隔离沙箱——它的高危性决定运行任何代码都不应脱离可信环境;
  • 需要"百发百中"成功率——任何 AI 渗透工具都不能替代人工"判断上下文与时效",应当作放大器而非替代者。

小结

VulnClaw 在 v0.3 系列完成了从"脚本式自动化"到"显式状态求解"的范式迁移——黑板图 + OODA + 证据级反幻觉三重改造,让它在中文学术型 AI Agent 中提供了一种值得借鉴的工程范式。如果你正在做"把 LLM 套进强安全场景"的工作,它的求解引擎设计与插件/Skill 体系都是一个不错的学习样本。

链接

  • 仓库:https://github.com/Unclecheng-li/VulnClaw
  • PyPI:https://pypi.org/project/vulnclaw/
  • License:MIT
  • 关联:基于 OpenAI / Anthropic / DeepSeek / 智谱 / Moonshot 等多家兼容模型;MCP 详情见 Model Context Protocol 官方规范。