尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PentestGPT HTB Enigma 资格认证实录:LLM 自主渗透测试循环的现场证据、失败归因与 Trace 驱动修复

PentestGPT HTB Enigma 资格认证实录:LLM 自主渗透测试循环的现场证据、失败归因与 Trace 驱动修复 PentestGPT HTB Enigma 资格认证实录LLM 自主渗透测试循环的现场证据、失败归因与 Trace 驱动修复【免费下载链接】PentestGPTAutomated Penetration Testing Agentic Framework Powered by Large Language Models项目地址: https://gitcode.com/GitHub_Trending/pe/PentestGPT本文基于 PentestGPT 仓库内的一次真实资格认证qualification记录完整还原其自主渗透测试循环在 HTB Enigma 靶机上的六轮现场运行结果、关键控制条件与失败归因并结合pentestgpt_agent包源码任务编译器、执行校验器、循环调度器解释每一条trace 驱动修复背后的确定性实现帮助读者理解LLM 负责推理、确定性代码负责权威状态这一设计在现场高强度运行中暴露的优势与边界。认证结论管线可用但未达成取证该记录的最终判定是Not qualified未通过。管线展示出了持久的、可审计的多步枚举能力但两个受测模型都未能获得经验证的用户级user-level与 root 级证明proof。运行结束后没有任何候选值提交到 Hack The Box报告中也不复现任何 proof 值Enigma 实例在产物收集后被成功关停。报告特别澄清了两点边界这是管线pipeline层面的结果不是靶机不可解的声明最后一轮 Codex 运行把大部分预算花在了重复发现与枚举上而没有收敛到一条具体的利用链exploitation chain。该记录同时标注了后续部署决策的变更两个角色Supervisor / Executor都改用全量 provider 工具与FULL_ACCESS选定的安全边界是隔离运行时本身而不是 PentestGPT 工具中介层当前架构以 docs/architecture.md 为准。认证范围与控制条件这一节定义了整场认证的可信前提也是复现任何一次现场认证时必须照抄的控制项目标明确授权的 HTB Enigma 机器仅通过远程攻击箱remote attack box和 HTB VPN 访问Provider 组合先是claude-opus-4-8/xhigh随后是gpt-5.5/xhigh硬超时每次现场调用 3,600 秒现场包身份PentestGPT wheel 的 SHA-256 为adde0569ac9c7073b4c46181c143120c4a245243090325b3df3c62244ed59ab0UnifiedAgent wheel 的 SHA-256 为9f5f58980e88109cde567bf7d6d2aafdbe75a4b7f31fcfb782b4317294cb7371——通过固定包哈希保证现场运行的代码可复述同一台活动机器分配贯穿所有诊断性重跑没有任何一轮使用 HTB 的 submit 端点每个角色的完整输入、归一化事件、动作回执、输出、用量与状态数据库都在关停前拷贝到本地。这些数据包含敏感目标信息未经脱敏不得发布。这些控制与pentestgpt_agent包的设计语言一一对应角色、任务、回执、观察observation、转移transition等术语在 pentestgpt_agent/CONTEXT.md 中有完整定义例如 Evidence 被严格限定为由一个合格动作回执捕获的精确目标输出而 provider/工具传输错误被明确排除在证据之外。六轮现场运行结果运行任务数尝试数剧集数墙钟时间报告成本终止结果Claude Q56612646.8 s$2.1776195Provider 网络安全安全拦截safety blockCodex Q4348573.4 s报告 $0先前的精确证据尚不可复用Codex Q55612700.5 s报告 $0非零退出码的命令回执被拒绝作为证据Codex Q61313262,680.0 s报告 $0过大的精确证据引文被拒绝Codex Q7811231,720.5 s报告 $0不受支持的长证据重写被拒绝Codex Q81215302,533.8 s报告 $0同任务证据复述paraphrase中止了运行两个必须澄清的读数$0 reported不能解读为免费执行。Codex 后端没有返回美元成本核算这只是未报告。成本字段来自每轮output.json的cost_usd求和——在 pentestgpt_agent/src/pentestgpt_agent/trial.py 的_trial_summary()中cost_usd是对全部剧集输出逐项累加得到的缺省记 0。Codex Q5 出现过一个未标注的 32 字符十六进制串。管线未能将其确认为任一所需 proof缺少权限上下文因此没有提交。其余所有列出的运行产生的规范候选canonical candidates数量为零。Q4–Q8 的命名本身就是迭代的痕迹每一轮 Codex 重跑都针对前一轮暴露的一个确定性校验失败做修复后再打。终止结果列里的四句话不可复用、非零回执、过大引文、长证据重写、复述中止对应下一节逐条展开的 trace 驱动修复。有效部分最强路径与记忆内核现场循环在多轮运行中持续维持了目标范围锁定、全新的角色剧集fresh episodes、只追加append-only的 trace、持久租约durable leases以及规范回执来源canonical receipt provenance。其最强路径完整走完了六步发现暴露的服务集合枚举并挂载只读 NFS 导出export提取出一份 onboarding 文档和一个 webmail 立足点foothold完成 webmail 与邮件协议面的认证执行了一次有边界的认证后命令执行测试把一次失败的 SSH 认证尝试记录为有效的负向证据。第 6 步值得单独强调它正是 pentestgpt_agent/CONTEXT.md 中不变量已完成命令的回执在非零退出状态时仍然合格因为负向结果也是发现findings的现场兑现。**记忆内核Memory Kernel**在长运行中没有依赖任何 provider 会话记忆存活下来。Q8 一路跑到 30 个全新 agent 剧集、状态修订revision第 30 版其间任务、尝试、trace、观察的身份保持一致直到最后的校验失败为止。这与循环实现的语义一致在 pentestgpt_agent/src/pentestgpt_agent/loop.py 的PentestLoop.run()中每一轮迭代要么恢复已有租约、要么消耗一个 Supervisor 决策且决策计数plan_committed转移数达到max_decisions时以decision_limit失败收尾——预算是持久化的重启不会让它失效。失败部分控制器收敛而非记忆容量报告把决定性弱点定位在controller convergence控制器收敛上并给出了可验证的判据Q8 从未选中过任何EXPLOIT任务。在获得立足点并完成一次有边界测试之后Supervisor 继续创建发现/枚举类工作、反复回访已经吃透的 NFS 与 HTTP 面最终耗尽时间而没有维护住一条具体的利用假设。报告明确定性这是过度分解over-decomposition不是记忆容量失败。这一点可以用源码里的任务类型系统佐证。TaskKind在 pentestgpt_agent/src/pentestgpt_agent/plan.py 中定义了六种DISCOVER、ENUMERATE、TEST、EXPLOIT、VERIFY、RECOVER。compile_plan()对EXPLOIT任务施加了硬约束——它必须复制精确的同一 target、引用该 target 上最新的已完成 TEST 观察并依赖之见 plan.py#L222-L243。也就是说EXPLOIT在架构上是被 TEST 证据解锁的而 Q8 的失败恰恰是 Supervisor 从未走到那一步不是编译器拦住了利用而是决策层没有推进到利用。报告还列出三条次要限制Provider 的max_turns不约束原生命令/工具动作。有一个早期剧集在 Executor 任务工作预算只有 6 轮的情况下打出了 28 条命令回执。当前设计把这视为遥测telemetry如果可强制的动作上限成为产品需求它必须由隔离运行时或 provider 接缝seam提供而不能从轮次计数推断。对照 pentestgpt_agent/src/pentestgpt_agent/agents.py#L209-L216 中的_EXECUTOR_TURN_BUDGETSDISCOVER 5 / ENUMERATE 6 / TEST 5 / EXPLOIT 9 / VERIFY 4 / RECOVER 6以及Executor.execute()中provider_turn_budget min(self.max_turns, 预算 1)的钳制逻辑这套预算约束的是provider 交互轮次外部命令副作用天然在其外。pentestgpt_agent/README.md 的Current limits一节也重复了同一结论max_turns不是可移植的命令/动作限制在 Codex 上尤其如此。xhigh推理档在动作之间常花一到两分钟。更好的提示词无法弥补反复出现低信息量任务的问题。Claude 运行在拿到 webmail 立足点后被 provider 的实时网络安全保护real-time cybersecurity safeguard拦下了下一步命令执行。该报告指出这是外部策略管线内部无法绕过要获得有效的 Claude 资格认证需要正确的 provider 接入路径。Trace 驱动的修复每条规则都有确定性的落点报告的方法论是每个确定性失败都先降级为保存 trace 的复放再改代码。五条修复及其在源码中的对应实现如下现场失败运行修复规则源码落点Q4先前精确证据不可复用精确的先前观察只能被同一任务复用_matching_prior_observation()按observation.task_id ! task_id过滤只接受同任务、按修订倒序的最新观察Q5非零退出回执被拒为证据已完成命令的非零退出状态可充当负向证据不变量层CONTEXT.mdis_grounding_receipt不再以退出码排除回执Q6过大精确引文被拒超大回执保留精确的4,000 字符后缀且只能提交progresscompile_execution()中exact_slice 4,000时取exact_slice[-4_000:]并标记truncatedTrue截断回执的DONE结果被降级为PROGRESSQ7不受支持的长证据重写被拒富文本引文回退到单个有界精确回执且只能提交progress_last_bounded_grounding_receipt()取最后一个非空接地回执的 4,000 字符尾evidence_fallbackTrue时DONE同样降级为PROGRESSQ8同任务复述中止运行无动作的DONE提案若复述本任务先前的规范证据则丢弃复述只提交任务本地progress转移中带evidence_unresolvedtrue不产生观察也不能复用其他任务的证据evidence_unresolved的判定条件与结果降级集中在 execution.py#L334-L354上表中的判定逻辑都集中在 pentestgpt_agent/src/pentestgpt_agent/execution.py 的compile_execution()中。值得注意其匹配次序先在当前 trace 的接地回执中做精确子串匹配CRLF/LF 归一化是唯一体文本传输归一化再做有序精确行跨度扩展与唯一行包络等受控放宽最后才允许证据回退——整个链条保证了任何被拒绝的引文都会落到一条可解释、可复放的路径上而不是随机失败。最后一条修复的验证方式在报告中单独强调它是在现场运行结束后、对真实的 Q8 终端 trace 做复放验证的。复放现在产生progress、无观察、无回执序号、evidence_unresolvedtrue。由于没有再发起新的现场运行这条修复的状态是replay-qualified复放合格而非 HTB-live qualified现场合格——这种合格等级的区分本身是这套认证方法的严谨之处。验证门槛合入前必须通过的检查报告记录的最终本地源码状态通过了以下验证121 passed, 1 skippedpytest 套件Ruff lint 与格式化检查对src的严格 mypy锁文件lockfile校验源码分发与 wheel 构建前述 Q8 终端 trace 复放。对应的可复现命令来自 pentestgpt_agent/README.md须在pentestgpt_agent/目录下执行避免仓库根目录的兼容副本遮蔽依赖uv sync --extra claude # 或 codex / all uv run python -m pytest -q uv run ruff check src tests uv run ruff format --check src tests uv run mypy src uv lock --check uv build其中121 passed指该包的测试套件——测试文件覆盖 pentestgpt_agent/tests/test_execution.py执行校验与证据回退、pentestgpt_agent/tests/test_plan.py计划编译、pentestgpt_agent/tests/test_loop.py循环恢复与重试等模块与上述每条修复规则形成现场失败 → trace 复放 → 回归测试的闭环。产物目录如何审计一次认证六个资格认证根目录为runs/htb/htb-enigma-claude-opus48-xhigh-q5-20260712/runs/htb/htb-enigma-codex-gpt55-xhigh-q4-20260712/runs/htb/htb-enigma-codex-gpt55-xhigh-q5-20260712/runs/htb/htb-enigma-codex-gpt55-xhigh-q6-20260712/runs/htb/htb-enigma-codex-gpt55-xhigh-q7-20260712/runs/htb/htb-enigma-codex-gpt55-xhigh-q8-20260712/这些runs/路径属于部署环境中的运行产物目录--runs-root缺省即runs不在本仓库内提交。审计顺序是固定的从每个根目录的evaluation.json和pipeline.stderr.log入手完整 agent 日志位于agent-data/runs/run-id/traces/episode-id/其中input.json是精确的角色输入含 prompt/schema 哈希与 provider 策略、events.jsonl是按时间排序的归一化事件/动作日志、output.json是终端 provider 结果与用量记录state.sqlite3是规范记忆镜像——权威状态在 SQLitetrace 只是诊断输入。input.json/events.jsonl/output.json的三件套结构由 pentestgpt_agent/src/pentestgpt_agent/trace.py 的EpisodeRunner/TraceStore写入循环恢复逻辑loop.py 的_supervisor_plan()与_drive_lease()在重启时会先检查traces.exists(...)再决定是否重调 provider——这保证了已存在的终端 trace 在重新调用 provider 之前先被编译并提交的恢复语义。需要再次提醒trace 包含敏感目标输出与 provider 会话标识文件是模式受限mode-restricted而非加密或防篡改的。下一步切片先收敛再打下一场报告给出的Required next slice要求保持设计精简并在下一次 HTB 运行之前先解决已被证明的控制器阻塞保留每个已完成分支的紧凑覆盖信息让旧发现不会从 Supervisor 的投影中消失拒绝重复的发现/枚举工作除非更新的规范证据打开了新面surface围绕单一活跃利用假设简化 Supervisor 选择一旦存在立足点除非指名一个真正的新面否则拒绝冗余的DISCOVER/ENUMERATE提案并要求下一个任务测试或利用价值最高、有证据支撑的假设。这三条的验证路径也很具体先在本地多阶段靶机上合格化这些改动断言项包括任务数、动作数、向利用推进的进展、来源完整性和重启行为之后才从干净的包构建重复远程资格认证。Provider 轮次计数应保持为性能遥测不被当作可移植的命令预算。这一方向与 docs/architecture.md 的判断一致当前的控制器弱点是收敛不是数据库容量并明确下一次设计切片应在再增加一个 agent 或 RAG之前改进确定性的策略投影与重复/分支策略。可复现的本地入口对于想在授权环境下重演运行 → 断言 → 恢复全流程的读者pentestgpt_agent包提供如下 CLI 入口摘自 pentestgpt_agent/README.md适用前提隔离、一次性部署环境仅含授权目标与所需 provider 凭证uv run pentestgpt-agent \ --goal Capture the flag from this authorized target. \ --target http://127.0.0.1:8080 \ --backend claude \ --model claude-opus-4-8 \ --effort xhigh \ --run-id example与本次认证直接相关的参数语义定义见 trial.py--effortClaude 侧接受low/medium/high/xhigh/maxCodex 侧接受low/medium/high/xhigh/none/minimal认证记录中的xhigh即此参数--max-decisions缺省 20范围 1–1000Supervisor 决策硬上限对应循环中decision_limit收尾--supervisor-max-turns缺省 4与--executor-max-turns缺省 12范围 2–100provider 交互轮次预算不是命令/动作上限--resume要求持久化的trial-config.json与新配置逐项精确匹配包括目标、provider、模型、effort、prompt/schema 哈希、预算、两个角色的FULL_ACCESS策略、provider 环境与unified-agent版本——这正是现场包身份必须可复述要求落到 CLI 层的形式。小结一份不合格记录的工程价值这份 2026-07-12 的资格认证记录的价值不在于解出了 Enigma而在于它把一次失败运行完整物化为可复述的证据链固定的 wheel 哈希、逐轮的终止原因、五条与compile_execution/compile_plan一一对应的修复规则、以及复放合格 / 现场合格两级认证语义。它同时划清了当前架构的能力边界——FULL_ACCESS下的隔离运行时是安全边界、provider 轮次只是遥测、COMPLETED只证明结构性证据引用而非任意语义目标蕴含。对于评估 LLM 自主渗透测试管线的工程团队这份记录给出了一个可直接套用的模板先让确定性代码拥有状态与来源再让模型在受约束的提案空间里推理失败时把一切降级为保存 trace 的复放测试。【免费下载链接】PentestGPTAutomated Penetration Testing Agentic Framework Powered by Large Language Models项目地址: https://gitcode.com/GitHub_Trending/pe/PentestGPT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表