hackingBuddyGPT:把 LLM 安全测试智能体压缩成几十行 use-case
Helping Ethical Hackers use LLMs in 50 Lines of Code or less..
秒懂
- 它是什么?
- 这个框架把 LLM 连接、目标连接器、工具装配、运行上限和结构化日志都做成了公共地基,研究者只需写一个 use-case 就能跑实验。真正需要判断的是:它的成功判定机制、异步执行模型和基准测试配套,是否值得你放弃自己搭一套胶水代码。
- 适合谁用?
- 如果你的工作是研究 LLM 在渗透测试中的行为,并且需要一个可复现、可对比、带 ground truth 成功判定的实验台,hackingBuddyGPT 的 use-case 抽象和 wintermute 注册机制能省掉大量重复的胶水代码,MIT 许可也让改造和再发布没有额外摩擦。如果你只是想要一个对生产环境做自动化扫描的工具,它的定位并不匹配:它执行的是真实命令,本地 shell 模式下跑在你的机器上,SSH 或 psexec 模式下跑在目标上,README 明确要求只在自有或获得授权的系统上运行,并建议使用隔离的 VM 或容器。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 2 天前。
- 用什么语言写的?
- 主要是 Python(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它要解决的其实是实验台问题,不是扫描器问题
把 LLM 接进安全测试,最耗时间的部分从来不是提示词,而是提示词外面那一圈东西:怎么连模型、怎么连目标、怎么把工具挂上去、怎么限制一次运行别把预算烧穿、怎么把过程记下来以便事后复盘。README 把这一圈称为 boring-but-essential groundwork,并说明框架已经提供了 LLM 连接、目标连接器(SSH、本地 shell、WinRM 风格的 psexec)、capability 与工具装配、运行限制和结构化日志。目标读者写得很直白:想用 LLM 或基于 LLM 的自主智能体做安全测试的研究人员和渗透测试人员。
判断标准因此变得很清楚。它不承诺替你发现漏洞,它承诺让你把一个新的实验想法表达成几十行代码。README 里那句 50 Lines of Code or less 指的就是这个:一个 use-case 本身可以很短,比如 MinimalPrivEscLinux 被描述为约 20 行的 Linux 提权实现。短不等于简单,它意味着复杂度被推到了框架层。你要评估的是框架层那部分是否可信。
use-case 即子命令:wintermute 的注册与调用路径
安装后提供的命令是 wintermute。不带参数运行它会列出所有已注册的 use-case,wintermute <UseCase> --help 显示该 use-case 自己的选项。这意味着每个实验在 CLI 层面都是一个子命令,实验之间的差异被限制在各自的参数空间里,而不是散落在不同的入口脚本中。
README 给出的最小提权示例把这条路径写全了:先 git clone 仓库并 cd 进去,uv sync 然后 source .venv/bin/activate,接着 cp .env.example .env 并编辑填入 LLM 密钥与目标信息,然后用 wintermute MinimalPrivEscLinux --conn=ssh --conn.host=192.168.122.151 --conn.username=lowpriv --conn.password=trustno1 运行。连接参数走 --conn 前缀,这一点在多个 use-case 之间是一致的。
值得注意的是目标来源。README 建议从配套的 Linux 提权基准仓库取一台有漏洞的机器,或者用 VulnHub 上类似 Lin.Security 这样的故意脆弱 VM。这个建议本身就是设计意图的说明:框架预期你在受控环境里跑,而不是对着真实资产跑。
两种执行风格共用同一个循环
框架层最实质的设计决定,是把执行风格分成两类却放在同一个循环上。第一类是原生的工具调用智能体:保留真实的聊天历史,通过 function calling 驱动目标。第二类是简单文本的命令策略:用 Mako 模板把历史渲染进提示词,从回复里解析出一条裸命令。MinimalPrivEscLinux 属于后者,README 称其为经典的 hackingBuddyGPT 循环;MinimalToolCallPrivEscLinux 是它的工具调用孪生版本。
这两种风格的差别不只是写法。文本策略每一轮都要把整个历史模板化进单个提示词,解析出一条命令,出错时错误信息以文本形式回到下一轮。工具调用版本维持结构化历史,模型以函数调用的形式表达动作。前者更容易理解和调试,后者在长任务里更不容易因为解析失败而中断。
真正让工具调用版本在安全测试语境下更有价值的,是成功判定的处理方式。README 说明 MinimalToolCallPrivEscLinux 的 task_solved 工具会针对 ground truth 进行验证,因此一个幻觉出来的、或者模型主动让步声称的 got root 无法记为成功。这一点值得单独拿出来说,因为它直接回应了 LLM 安全智能体最常见的一类失真:模型倾向于报告任务完成。
use-case 的层次:从单点提权到调用另一个 use-case
仓库自带的 use-case 覆盖了几个不同层次。提权方向有 MinimalPrivEscLinux、MinimalToolCallPrivEscLinux、功能完整的 PrivEscLinux(带可选的检索增强生成 --rag_path、思维链 --enable_cot、状态跟踪和结构化引导)、面向 Windows 并通过 psexec 驱动的 PrivEscWindows,以及 ExPrivEscLinuxLSE。
ExPrivEscLinuxLSE 的结构值得留意:它先在目标上运行 lse.sh,把输出转成提示,然后针对每个提示去编排 PrivEscLinux。README 把它称为一个调用另一个 use-case 的 use-case。这是框架抽象是否成立的试金石。如果 use-case 只能作为顶层命令存在,那么任何分阶段实验都得重写一遍连接和日志逻辑;能够互相调用,说明这层抽象至少在设计上是可组合的。
Web 方向有 WebTestingWithExplanation(通过 HTTP 自主测试网页,并包含一套 OWASP 风格的渗透测试 playbook capability)、WebTestingWithShell(带 Kali 风格攻击机 shell 访问),以及 AdvancedWebTesting。最后一个的设计是分层:顶层智能体没有直接的目标访问权限,通过 sub-agent capability 把工作委派给有边界的子智能体。Web API 方向是 WebAPITesting,先探测目标表面,也就是 OpenAPI spec 或网站 sitemap,然后对 REST API 做测试,支持 --mode 的 document、test、auto 三种取值。Active Directory 方向是 AD,README 说它移植自 cochise 攻击工具,采用 planner/executor 设计:一个持久的战略规划器维护任务树和共享知识库,把每个任务委派给一个全新的、无记忆的战术执行器。
异步模型与运行上限:把成本控制做成框架职责
框架的执行模型是完全异步的,基于 asyncio。这不是一个可以忽略的实现细节。当 use-case 需要同时与多个目标交互,或者在 AdvancedWebTesting 这类分层结构里同时管理顶层智能体和子智能体时,同步模型会迫使你在架构上做妥协。异步也意味着日志写入、LLM 调用和目标命令执行共享同一个事件循环,任何一处阻塞都会影响整体节奏。
运行上限是另一处框架接管的职责。README 列出统一的限制项,可以按轮数、token 数、美元成本以及墙钟时长来限制任意一次运行,对应的键是 --limits.max_rounds、--limits.max_tokens、--limits.max_cost、--limits.max_duration。把这四项放在框架层而不是各个 use-case 里,好处是任何一个新实验默认就受控,不需要作者记得自己实现。
LLM 上游只有一个:litellm。任何提供商都通过 llm.model 字符串抵达,README 列举的方向包括 OpenAI、OpenRouter(默认端点)、Anthropic、Azure 和本地 Ollama。另外可以用 --llm.proxy 把 API 流量路由到拦截代理,比如 Burp 或 mitmproxy。对研究场景来说,后面这个参数比它看起来更重要:它让提示词和回复可以被完整观察,而不必依赖框架自己的日志。
日志格式决定了这些实验能不能被复盘
每次运行都会写成一个只追加的 OpenTelemetry/GenAI JSONL trace,并配有用于重放和聚合运行的 CLI 工具。README 把它描述为结构化、自包含的日志。
这个选择的实际后果是,trace 不是给人看的文本日志,而是带 schema 的结构化记录。好处是可以用工具聚合多次运行,做跨配置的对比;代价是直接打开文件阅读的体验不如纯文本。如果你习惯用 grep 翻日志,需要先确认仓库里那几个重放和聚合命令的具体用法,README 只说明了它们存在,没有给出完整示例。
与之配套的是 Docker 集群基准启动器,README 说它用于同时针对多个目标做回归测试。这说明作者把可复现研究当作一等目标,而不只是把框架发出来。配套的 Linux 提权基准仓库和公开报告也指向同一个方向。至于这些配套工具在你自己环境里需要多少改造,材料里没有足够信息判断。
什么时候它不合适,以及一个真实的替代路径
最明显的边界写在 README 的警告里:这个软件在真实系统上执行真实命令。本地 shell 模式下命令跑在你自己的机器上,SSH 或 psexec 模式下跑在你指向的目标上。这意味着两件事。第一,任何没有明确授权或没有隔离的环境都不该碰它。第二,它不是一个可以随手对着生产资产运行的扫描器,它的输出取决于模型判断,而模型判断会波动。
还有一类不匹配是研究目标本身。如果你关心的是漏洞覆盖率和扫描吞吐,基于 LLM 的智能体当前的开销结构并不划算:每一轮都要调用模型,成本受 --limits.max_cost 约束,而发现路径依赖模型的推理。这种情况下,把 lse.sh 这类确定性枚举脚本直接跑一遍,再人工分析输出,往往更快也更可预测。ExPrivEscLinuxLSE 的存在恰好说明了这一点:它把 lse.sh 当作提示来源,而不是让模型从零开始摸索。
如果要找一个思路不同的替代方案,README 自己指向了 cochise,AD use-case 就是从那里移植过来的。两者的差别在于组织方式:hackingBuddyGPT 把 LLM 连接、目标连接器、运行上限和日志做成所有 use-case 共享的框架层,实验作者写的是薄薄一层逻辑;cochise 是围绕 Active Directory 假定失陷场景构建的攻击工具,其结构服务于那一类攻击链,而不是服务于把任意安全测试想法快速表达成可对比实验。选哪个取决于你要的是通用实验台还是特定场景的成熟流程。
维护成本、版本节奏与许可
从发布记录看,v0.3.0 出现在 2024 年 8 月,v0.4.0 在 2025 年 4 月,v0.5.0 在 2025 年 8 月。节奏大致是每年一到两个功能版本,仓库在 2026 年 8 月仍有推送,没有归档。这个节奏对研究型框架是合理的,但也意味着你不该期待快速的破坏性变更修复。
升级成本主要来自两处。一是 Python 版本要求为 3.13 或更高,项目使用 uv 作为构建后端,README 推荐用 uv 管理环境,同时也说明普通的 python -m venv 加 pip 可行。如果你的环境还停在更早的 Python 版本,这会是第一道门槛。二是 litellm 作为唯一的 LLM 上游,任何提供商侧的接口变化都要经过这一层传导,llm.model 字符串的可用性因此不是你能完全控制的。
许可方面,仓库采用 MIT。这个许可通常允许修改、再发布和商业使用,具体义务以 LICENSE 文件原文为准。这里不做法律判断,只提示一点:框架本身是 MIT,但它调用的目标工具、基准环境和第三方组件各有自己的许可,混用前需要分别确认。
编辑结论
如果你的工作是研究 LLM 在渗透测试中的行为,并且需要一个可复现、可对比、带 ground truth 成功判定的实验台,hackingBuddyGPT 的 use-case 抽象和 wintermute 注册机制能省掉大量重复的胶水代码,MIT 许可也让改造和再发布没有额外摩擦。如果你只是想要一个对生产环境做自动化扫描的工具,它的定位并不匹配:它执行的是真实命令,本地 shell 模式下跑在你的机器上,SSH 或 psexec 模式下跑在目标上,README 明确要求只在自有或获得授权的系统上运行,并建议使用隔离的 VM 或容器。真正动手之前,先确认 Python 版本是 3.13 或更高,先用不带参数的 wintermute 列出全部 use-case,再用 wintermute <UseCase> --help 逐个核对参数,尤其是 --limits.max_rounds、--limits.max_tokens、--limits.max_cost、--limits.max_duration 这四个上限键,以及你打算使用的 llm.model 字符串在 litellm 下是否可用。
社区笔记