Merge pull request #82 from Autumn-27/demo/enrich-planner-mock
feat(demo): 丰富 Vercel mock 里的 planner 规划过程
This commit is contained in:
1 file changed
+294
-27
+294
-27
@@ -1263,63 +1263,330 @@ export const frontier: TaskNode[] = explorationGraph.nodes.filter(
|
||||
// intent_id 的活动流。planner=worker "planner"、主 agent=worker "mainagent"。
|
||||
// 每个 worker 会话含完整工具执行链(tool_use → tool_result → …→ result)。
|
||||
export const activity: Activity[] = [
|
||||
// planner
|
||||
{ seq: 1, worker: "planner", ts: T("2026-07-24T09:12:10Z"), kind: "round", summary: "第 0 轮 · 目标拆解" },
|
||||
// planner —— 每轮完整决策链:读态势 → 拉 worker 产出对照 → 判目标 → add_intent 派方向
|
||||
// ── 第 0 轮 · 目标拆解与首批意图(2026-07-24 09:12)──
|
||||
{ seq: 1000, worker: "planner", ts: T("2026-07-24T09:12:10Z"), kind: "round", summary: "第 0 轮 · 目标拆解" },
|
||||
{
|
||||
seq: 2,
|
||||
seq: 1001,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-24T09:12:30Z"),
|
||||
ts: T("2026-07-24T09:12:25Z"),
|
||||
kind: "thinking",
|
||||
summary: "acme.com 是企业站,攻击面:官网(www)、后台(admin)、API(api)、商城(shop)。先枚举资产,再挑高价值目标。",
|
||||
summary:
|
||||
"graph_overview:goals 已由目标层拆好——g1「获取 acme.com 后台管理权限」、g2「读取用户敏感数据」,均 open;facts=0、recent_facts 为空(图基本空白,还没有任何 worker 产出)。范围内资产只有根域 acme.com + 一个 C 段。攻击面初判:www / admin / api / shop / vpn 五个入口。图里没有 fact,我只能做【极轻量只读探测】把初始意图说具体,绝不在 plan 里把活干了。",
|
||||
},
|
||||
{
|
||||
seq: 3,
|
||||
seq: 1002,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-24T09:12:40Z"),
|
||||
kind: "tool_use",
|
||||
tool: "bash",
|
||||
tool_use_id: "p0-probe",
|
||||
summary: "curl -sI https://acme.com; curl -sI https://admin.acme.com",
|
||||
detail: "开局态势几乎空白,做 ≤3 次只读探测校准初始意图方向(不做枚举/验证,那是 worker 的活)。",
|
||||
},
|
||||
{
|
||||
seq: 1003,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-24T09:12:52Z"),
|
||||
kind: "tool_result",
|
||||
tool: "bash",
|
||||
tool_use_id: "p0-probe",
|
||||
summary: "acme.com → 302 → www;Server: nginx/1.24.0\nadmin.acme.com → 200,X-Powered-By 缺省,body 命中 element-ui/vue 特征",
|
||||
detail: "admin 是独立后台登录页;确认五入口有效,可把初始意图描述写精准。",
|
||||
},
|
||||
{
|
||||
seq: 1004,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-24T09:13:00Z"),
|
||||
kind: "text",
|
||||
summary:
|
||||
"拆出两个目标:① 获取后台管理权限 ② 读取用户敏感数据。派生首批意图:子域枚举、后台口令测试、注入探测、API 越权。",
|
||||
kind: "tool_use",
|
||||
tool: "add_intent",
|
||||
tool_use_id: "p0-ai",
|
||||
summary: "add_intent × 4(批量派首批探索方向)",
|
||||
detail:
|
||||
"intents=[\n { summary: 'acme.com 全量子域枚举 + 存活主机端口/服务识别,摸清攻击面', asset_ids: [acme.com], priority: 6 },\n { summary: 'admin.acme.com 后台默认口令/弱口令测试(Element-UI 登录,无验证码)', asset_ids: [admin], priority: 9 },\n { summary: 'www.acme.com/search q 参数 SQL 注入探测', asset_ids: [www], priority: 8 },\n { summary: 'api.acme.com 订单接口越权(IDOR)测试', asset_ids: [api], priority: 8 },\n]\nparent_ids 均空(顶层全新方向,兜底连 origin fact)。",
|
||||
},
|
||||
{ seq: 300, worker: "planner", ts: T("2026-07-25T14:12:00Z"), kind: "round", summary: "第 1 轮 · 攻击面加码" },
|
||||
{
|
||||
seq: 301,
|
||||
seq: 1005,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T14:12:20Z"),
|
||||
kind: "text",
|
||||
summary:
|
||||
".git 泄露出源码+硬编码 DB 口令,shop 指纹疑似 Fastjson。新增目标③「突破 DMZ 建立内网立足点」,派生指纹关联、反序列化 RCE 两条意图。",
|
||||
ts: T("2026-07-24T09:13:02Z"),
|
||||
kind: "tool_result",
|
||||
tool: "add_intent",
|
||||
tool_use_id: "p0-ai",
|
||||
summary: "4 intents created → ids=[i1, i2, i4, i5],已连入 frontier",
|
||||
detail: "刻意保持路线多样:i1 侦察 + i2(g1 认证路线)+ i4/i5(g2 数据路线),2 条独立机理并行,不过早收敛。",
|
||||
},
|
||||
{
|
||||
seq: 302,
|
||||
seq: 1006,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-24T09:13:05Z"),
|
||||
kind: "text",
|
||||
summary:
|
||||
"本轮派生首批 4 条意图:i1 资产侦察、i2 后台口令、i4 注入、i5 API 越权。g1 走 i2、g2 走 i4/i5,双目标各有独立入口在推进。等 worker 产出事实后再据血缘加码。",
|
||||
},
|
||||
|
||||
// ── 第 1 轮 · 攻击面加码(2026-07-25 14:12)──
|
||||
{ seq: 1100, worker: "planner", ts: T("2026-07-25T14:12:00Z"), kind: "round", summary: "第 1 轮 · 攻击面加码" },
|
||||
{
|
||||
seq: 1101,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T14:12:15Z"),
|
||||
kind: "thinking",
|
||||
summary:
|
||||
"对照 recent_facts:workG 交回 faGit「.git 可下载,git-dumper 还原出后端源码」与 faCreds「config.php 硬编码 sa/Acme@2021(疑似内网通用)」;work#6 指纹交回 fa3「shop 命中 Fastjson 1.2.24(存在已知反序列化 RCE)」。两条【材料性新机理】:① 硬编码 DB 口令可能横跨内网复用;② Fastjson 有成熟 RCE 打法。这打开一条与现有认证/注入路线【本质不同】的入口——从 shop 直接 RCE 突破进 DMZ。先拉 faGit 详情核实产物。",
|
||||
},
|
||||
{
|
||||
seq: 1102,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T14:12:28Z"),
|
||||
kind: "tool_use",
|
||||
tool: "node_detail",
|
||||
tool_use_id: "p1-nd",
|
||||
summary: "node_detail(faGit) —— 核对 workG 的源码还原产物",
|
||||
detail: "add_intent 前先看 worker 到底还原出什么,避免凭指纹臆测方向。",
|
||||
},
|
||||
{
|
||||
seq: 1103,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T14:12:35Z"),
|
||||
kind: "tool_result",
|
||||
tool: "node_detail",
|
||||
tool_use_id: "p1-nd",
|
||||
summary:
|
||||
"faGit 证据:git-dumper 还原出 config.php / db.php / order_api.php;config.php 内 $db=['host'=>'10.10.10.5','user'=>'sa','pass'=>'Acme@2021']",
|
||||
detail: "硬编码指向内网 10.10.10.5(FS01),佐证 faCreds 的「内网通用」推断——RCE 落地后这组口令值得复用。",
|
||||
},
|
||||
{
|
||||
seq: 1104,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T14:12:50Z"),
|
||||
kind: "tool_use",
|
||||
tool: "add_intent",
|
||||
tool_use_id: "p1-ai",
|
||||
summary: "add_intent × 2(Fastjson 突破链,串行分步先派可执行一步)",
|
||||
detail:
|
||||
"intents=[\n { summary: 'shop.acme.com 组件指纹深挖 + Fastjson 1.2.24 CVE 精确关联(确认 gadget 链)', asset_ids: [shop], parent_ids: [fa3], priority: 7 },\n { summary: '构造 Fastjson 反序列化 payload 触发 shop RCE,获取反弹 shell', asset_ids: [shop], parent_ids: [fa3], priority: 9 },\n]\n注:这是强依赖串行链,已 TodoWrite 记『指纹→RCE→立足点提权』三步,本轮只派前两步(提权依赖 shell 产出,下轮再派)。",
|
||||
},
|
||||
{
|
||||
seq: 1105,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T14:12:52Z"),
|
||||
kind: "tool_result",
|
||||
tool: "add_intent",
|
||||
tool_use_id: "p1-ai",
|
||||
summary: "2 intents created → ids=[i6, i7],已由 fa3 连入血缘",
|
||||
},
|
||||
{
|
||||
seq: 1106,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T14:13:00Z"),
|
||||
kind: "text",
|
||||
summary:
|
||||
"态势升级:源码 + 硬编码内网口令 + Fastjson RCE 构成一条全新突破路线。已请目标层登记 g3「从外网突破 DMZ,建立内网立足点」,派 i6(指纹/CVE 关联)、i7(触发 RCE)。DMZ 提权一步依赖 shell,记入待办下轮派。",
|
||||
},
|
||||
|
||||
// ── 第 2 轮 · 立足点已建,转内网(2026-07-25 20:25)──
|
||||
{
|
||||
seq: 1200,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:25:00Z"),
|
||||
kind: "round",
|
||||
summary: "第 2 轮 · 立足点已建,转内网",
|
||||
},
|
||||
{
|
||||
seq: 303,
|
||||
seq: 1201,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:26:00Z"),
|
||||
ts: T("2026-07-25T20:25:18Z"),
|
||||
kind: "thinking",
|
||||
summary:
|
||||
"对照血缘:i7 交回 fa4「反弹 shell www-data@dmz-web01(10.0.20.15),位于 DMZ 段」;提权链交回 fa5「sudo -l 命中 NOPASSWD python3 → 可提权 root」、fa6「立足点第二网卡直连内网 10.10.10.0/24」。g3 的验收条件(突破 DMZ + 建立足点)已被 fa4+fa6 直接满足。先核实 fa6 的内网可达性再 prove_goal。",
|
||||
},
|
||||
{
|
||||
seq: 1202,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:25:30Z"),
|
||||
kind: "tool_use",
|
||||
tool: "node_detail",
|
||||
tool_use_id: "p2-nd",
|
||||
summary: "node_detail(fa6) —— 确认双网卡与内网可达",
|
||||
},
|
||||
{
|
||||
seq: 1203,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:25:38Z"),
|
||||
kind: "tool_result",
|
||||
tool: "node_detail",
|
||||
tool_use_id: "p2-nd",
|
||||
summary: "fa6 证据:ip a → eth0 10.0.20.15(DMZ) / eth1 10.10.10.15(内网);ping 10.10.10.10 通,跨越 DMZ 边界成立",
|
||||
},
|
||||
{
|
||||
seq: 1204,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:25:50Z"),
|
||||
kind: "tool_use",
|
||||
tool: "prove_goal",
|
||||
tool_use_id: "p2-pg",
|
||||
summary: "prove_goal(g3, evidence=fa6)",
|
||||
detail: "reason:i7 RCE 拿到 DMZ 立足点(fa4)、fa5 提权 root、fa6 证明第二网卡直连内网并 ping 通 DC01——『突破 DMZ 建立内网立足点』验收达成。",
|
||||
},
|
||||
{
|
||||
seq: 1205,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:25:52Z"),
|
||||
kind: "tool_result",
|
||||
tool: "prove_goal",
|
||||
tool_use_id: "p2-pg",
|
||||
summary: "goal g3 → met(证据 fa6 已连入);仍有 g1/g2/g4 未达成,任务继续",
|
||||
},
|
||||
{
|
||||
seq: 1206,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:26:10Z"),
|
||||
kind: "tool_use",
|
||||
tool: "add_intent",
|
||||
tool_use_id: "p2-ai",
|
||||
summary: "add_intent × 4(以立足点为 pivot 展开内网横向)",
|
||||
detail:
|
||||
"intents=[\n { summary: '以 dmz-web01 为 pivot 做内网 10.10.10.0/24 主机发现与端口识别', asset_ids: [dmz-web01], parent_ids: [fa6], priority: 8 },\n { summary: '内网横向:复用硬编码口令 sa/Acme@2021 做凭据复用与密码喷洒', parent_ids: [faCreds], priority: 8 },\n { summary: '内部 Jenkins(10.10.10.20) 未授权 /script Groovy 执行(RCE)', parent_ids: [fa6], priority: 9 },\n { summary: '对域服务账号做 Kerberoasting 并离线破解', parent_ids: [fa6], priority: 8 },\n]\n主机发现是前置(先派),其余三条是并行的横向探索维度。",
|
||||
},
|
||||
{
|
||||
seq: 1207,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:26:12Z"),
|
||||
kind: "tool_result",
|
||||
tool: "add_intent",
|
||||
tool_use_id: "p2-ai",
|
||||
summary: "4 intents created → ids=[i9, i10, i11, i12]",
|
||||
},
|
||||
{
|
||||
seq: 1208,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-25T20:26:20Z"),
|
||||
kind: "text",
|
||||
summary:
|
||||
"RCE 拿到 www-data 并提权 root,立足点双网卡直连 10.10.10.0/24(g3 达成)。新增目标④「拿下内部靶标 DC01」,派生内网主机发现、凭据复用、Jenkins 利用、Kerberoasting 四条意图。",
|
||||
"g3 达成,攻击面从外网转入内网。已请登记 g4「内网横向,拿下内部靶标域控 DC01」,派 i9(主机发现)+ i10/i11/i12 三条并行横向。凭据复用直接锚在 faCreds 上——外网源码泄露的口令喂给内网横向。",
|
||||
},
|
||||
{ seq: 304, worker: "planner", ts: T("2026-07-26T00:25:00Z"), kind: "round", summary: "第 3 轮 · 靶标达成复盘" },
|
||||
|
||||
// ── 第 3 轮 · 靶标达成复盘(2026-07-26 00:25)──
|
||||
{ seq: 1300, worker: "planner", ts: T("2026-07-26T00:25:00Z"), kind: "round", summary: "第 3 轮 · 靶标达成复盘" },
|
||||
{
|
||||
seq: 305,
|
||||
seq: 1301,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T00:26:00Z"),
|
||||
ts: T("2026-07-26T00:25:16Z"),
|
||||
kind: "thinking",
|
||||
summary:
|
||||
"对照本轮 worker 产出:i9→fa7「内网存活 DC01/FS01/JENKINS」;i11→fa8「Jenkins /script 无鉴权 Groovy」+ fa9「从 Jenkins 凭据库导出 acme\\svc_deploy 明文口令」;i12→fa10「Kerberoast svc_sql TGS,hashcat 破出 Sql@2020」。svc_deploy 属 Domain Admins,i13 已用其 psexec 拿下 DC01 并 secretsdump。g4 验收(拿下 DC01)应已达成,先核对 finding 证据链再盖章。",
|
||||
},
|
||||
{
|
||||
seq: 1302,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T00:25:30Z"),
|
||||
kind: "tool_use",
|
||||
tool: "list_findings",
|
||||
tool_use_id: "p3-lf",
|
||||
summary: "list_findings —— 核对 DC01 沦陷的确认证据",
|
||||
},
|
||||
{
|
||||
seq: 1303,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T00:25:40Z"),
|
||||
kind: "tool_result",
|
||||
tool: "list_findings",
|
||||
tool_use_id: "p3-lf",
|
||||
summary:
|
||||
"F-09「域控 DC01 完全控制 / secretsdump 导出全域哈希」critical(证据:psexec [email protected] + NTDS.dit dump);上游链 fa9→fa10→i13 完整",
|
||||
},
|
||||
{
|
||||
seq: 1304,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T00:25:52Z"),
|
||||
kind: "tool_use",
|
||||
tool: "prove_goal",
|
||||
tool_use_id: "p3-pg",
|
||||
summary: "prove_goal(g4, evidence=F-09)",
|
||||
detail: "reason:Jenkins 泄露 svc_deploy(Domain Admin) → psexec 控制 DC01 → secretsdump 全域哈希,F-09 已确认,『拿下内部靶标域控 DC01』达成。",
|
||||
},
|
||||
{
|
||||
seq: 1305,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T00:25:54Z"),
|
||||
kind: "tool_result",
|
||||
tool: "prove_goal",
|
||||
tool_use_id: "p3-pg",
|
||||
summary: "goal g4 → met;系统提示:g2 仍 open,非最后一个目标,任务未整体收官",
|
||||
},
|
||||
{
|
||||
seq: 1306,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T00:26:10Z"),
|
||||
kind: "text",
|
||||
summary:
|
||||
"svc_deploy 属于 Domain Admins,已 psexec 拿下 DC01 并 secretsdump 全域哈希(g4 达成)。内外网链路打通,收敛剩余 g2(后台批量用户数据)。",
|
||||
"g4 收官,内外网链路完全打通(外网 RCE → DMZ → 内网 → 域控)。逐一比对未覆盖方向:g2「读取用户敏感数据」仍缺临门一脚,但现有 i3(后台用户接口)+ i5(API IDOR)已覆盖该方向、且都在 running。本轮无【本质不同的未覆盖新方向】——按克制原则 0 新意图,等 i3/i5 产出。",
|
||||
},
|
||||
{ seq: 4, worker: "planner", ts: T("2026-07-26T03:55:00Z"), kind: "round", summary: "第 4 轮 · 复盘" },
|
||||
|
||||
// ── 第 4 轮 · 后台达成,收敛 g2(2026-07-26 03:55)──
|
||||
{ seq: 1400, worker: "planner", ts: T("2026-07-26T03:55:00Z"), kind: "round", summary: "第 4 轮 · 后台达成,收敛 g2" },
|
||||
{
|
||||
seq: 5,
|
||||
seq: 1401,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T03:55:10Z"),
|
||||
ts: T("2026-07-26T03:55:14Z"),
|
||||
kind: "thinking",
|
||||
summary:
|
||||
"对照 recent_facts:work#2 用 faCreds 里的 Acme@2021 命中 admin 后台(i2 done),后台管理权限到手——g1 验收达成,先 prove_goal 盖章。随后做【量化验收核对】:g2「读取用户敏感数据」当前只有 i3/i5 摸到接口面、尚未真正取到批量数据,实测未达标,【禁止】prove_goal,改为提优先级补足取数意图。",
|
||||
},
|
||||
{
|
||||
seq: 1402,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T03:55:26Z"),
|
||||
kind: "tool_use",
|
||||
tool: "prove_goal",
|
||||
tool_use_id: "p4-pg",
|
||||
summary: "prove_goal(g1, evidence=fa1)",
|
||||
detail: "reason:i2 用外网泄露的硬编码口令 Acme@2021 成功登入 admin 后台(Element-UI),获取后台管理权限,g1 达成。",
|
||||
},
|
||||
{
|
||||
seq: 1403,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T03:55:28Z"),
|
||||
kind: "tool_result",
|
||||
tool: "prove_goal",
|
||||
tool_use_id: "p4-pg",
|
||||
summary: "goal g1 → met;剩余未达成:g2",
|
||||
},
|
||||
{
|
||||
seq: 1404,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T03:55:40Z"),
|
||||
kind: "thinking",
|
||||
summary:
|
||||
"g2 量化核对:目标要求『读取用户敏感数据』=实际拿到批量用户记录。graph_overview 里 findings 尚无『成功导出用户数据』条目,i3/i5 均 running 未回取数结果——实测未达标。严禁以『后台已进、大体达成』提前标 met,继续派意图补足差距。",
|
||||
},
|
||||
{
|
||||
seq: 1405,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T03:55:52Z"),
|
||||
kind: "tool_use",
|
||||
tool: "add_intent",
|
||||
tool_use_id: "p4-ai",
|
||||
summary: "add_intent × 2(收敛 g2 取数,提高优先级)",
|
||||
detail:
|
||||
"intents=[\n { summary: '已登入 admin 后台,枚举用户管理/导出接口并批量拉取用户敏感字段', asset_ids: [admin], parent_ids: [fa1], priority: 9 },\n { summary: 'api.acme.com 订单 IDOR 遍历 order_id 批量拉取用户订单/PII', asset_ids: [api], parent_ids: [fa2], priority: 9 },\n]\n注:i3/i5 已在 running,本轮以更精准的取数描述 + 提优先级(→9)加码,不重复派同义意图。",
|
||||
},
|
||||
{
|
||||
seq: 1406,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T03:55:54Z"),
|
||||
kind: "tool_result",
|
||||
tool: "add_intent",
|
||||
tool_use_id: "p4-ai",
|
||||
summary: "2 intents updated → ids=[i3, i5](优先级升至 9,描述细化为『批量取数』)",
|
||||
},
|
||||
{
|
||||
seq: 1407,
|
||||
worker: "planner",
|
||||
ts: T("2026-07-26T03:55:58Z"),
|
||||
kind: "text",
|
||||
summary: "后台已拿下(g1 达成)。继续 g2:派生「枚举后台用户接口」「API IDOR 测试」两条意图并提高优先级。",
|
||||
summary:
|
||||
"g1 达成(4/4 里已 met 3 个:g1/g3/g4)。g2 严守量化验收——只进后台不算,必须拿到批量用户数据才盖章;已把 i3/i5 提到 priority 9 并细化为取数意图,等 worker 回传即可收官整个任务。",
|
||||
},
|
||||
|
||||
// work#1 · i1 子域枚举与端口扫描(done)
|
||||
|
||||
Reference in new issue
Block a user