同步
This commit is contained in:
1 parent
e67ff26e90
commit
58f23a2773
61 files changed
+11611
-443
No files matched your search
+16
-2
@@ -15,6 +15,17 @@ import (
|
||||
// prompt, seeded into agent_prompts. No template vars are used today.
|
||||
const goalsDefaultTmpl = `你是渗透测试目标分解器。你的职责是从用户输入中识别出**最终要达成的结果**,而不是规划攻击步骤。
|
||||
|
||||
**第一步(拆分目标之前先做):抽取操作约束**
|
||||
从「任务目标 / 任务描述」里识别操作员对【可以做什么、不可以做什么操作】的明确规定,调用 set_constraints 逐条登记(如果描述、目标中不涉及操作约束可以不进行提取操作约束):
|
||||
- type=deny:禁止的操作(如「不扫端口」「不得对生产环境做写/删操作」「禁止爆破」「不碰某子域」)。
|
||||
- type=allow:明确允许/限定的操作范围(如「只允许被动侦察」「仅针对某域名」)。
|
||||
- 约束 ≠ 目标,也 ≠ 攻击步骤:它是对操作行为边界的规定。
|
||||
- **约束必须【自包含、写死具体目标】**:把「当前目标/当前端口/当前IP/当前域名/本站」这类**指代词**替换成任务目标/描述里的**具体值**。约束会被单独注入到执行阶段的提示里,脱离上下文后指代词无法判断指谁。
|
||||
例:目标是 https://abc.example.net → 写「只允许测试 abc.example.net」而不是「只允许测试当前目标」;「仅测目标端口 443,不扫其他端口」而不是「只测当前端口」。若原文只说「当前目标」但目标地址已明确,就把地址填进去。
|
||||
- **只登记目标/描述里【明确写出或强调】的约束,严禁臆造**;拿不准类型时用 deny(更保守)。
|
||||
- 若目标/描述里确实没有任何操作约束,则**不要**调用 set_constraints。
|
||||
登记完约束(如有)后,再进行下面的目标拆分。
|
||||
|
||||
**目标 = 最终可交付/可核验的结果**
|
||||
|
||||
**不是目标的内容(禁止列为子目标)**:
|
||||
@@ -90,7 +101,9 @@ func DecomposeGoals(ctx context.Context, c Config, dataDir, goalText, desc strin
|
||||
// {{.EngagementDescription}} template var — else a prompt that references the var
|
||||
// would inject the description twice. System prompt stays pure static instructions.
|
||||
sys := renderSystem("goals", goalsDefaultTmpl, GoalsVars{DataDir: dataDir, Now: nowStr()})
|
||||
tools := []actool.CoreTool{tsx.setGoals()}
|
||||
// set_constraints 始终可用(不依赖 asset store):正文已含「先抽操作约束再拆目标」这步
|
||||
// (可在 agent 编辑页改措辞),这里只需接上工具。
|
||||
tools := []actool.CoreTool{tsx.setGoals(), tsx.setConstraints()}
|
||||
// Wire add_task_scope only when we have a real asset store + task to write to.
|
||||
// The scope-extraction tail is appended in lockstep so the prompt never asks for
|
||||
// a tool that isn't present.
|
||||
@@ -116,7 +129,8 @@ func DecomposeGoals(ctx context.Context, c Config, dataDir, goalText, desc strin
|
||||
Tools: tools,
|
||||
PermissionMode: acperm.ModeBypass,
|
||||
DisableBackgroundTasks: true,
|
||||
MaxTurns: 6,
|
||||
// 3 步(抽约束 → 登记范围 → 拆目标)各需一次工具调用,给足回合避免收尾前漏调 set_goals。
|
||||
MaxTurns: 8,
|
||||
}, userMsg, captureEmit)
|
||||
// set_goals persisted the goals directly; read them back so the caller sees what
|
||||
// was written (empty slice ⇒ the LLM produced nothing ⇒ caller falls back).
|
||||
|
||||
Reference in new issue
Block a user