Add files via upload

This commit is contained in:
公明
2025-12-24 17:23:14 +08:00
committed by GitHub
parent aa90769a3d
commit e860c84975

View File

@@ -335,20 +335,36 @@ func (b *Builder) buildSimplePrompt(reactInput, modelOutput string) string {
## 核心原则
**目标:让不懂渗透测试的同学可以通过这个攻击链路学习到知识,而不是无数个节点看花眼。**
**即便某些工具执行或漏洞挖掘没有成功,只要它们提供了关键线索、错误提示或下一步思路,也要被保留下来。**
**⚠️ 特别重要:失败路径和错误经验同样具有重要价值!**
**失败路径的价值:**
- **指引作用**:失败的尝试往往揭示了系统的防御机制、配置信息或攻击面边界
- **学习价值**:展示"为什么这条路走不通"、"遇到了什么障碍"、"如何绕过或解决"
- **完整还原**:真实的渗透测试过程包含大量失败尝试,只展示成功路径会误导学习者
- **关键线索**即使工具执行失败错误信息、超时、拒绝连接等都可能包含重要信息如WAF类型、防护策略、端口状态等
**必须保留的失败路径类型:**
1. **工具执行失败但提供了线索**:如"工具未安装"、"权限不足"、"连接被拒绝"、"超时"等,这些信息有助于理解环境限制
2. **漏洞验证失败但指明了方向**:如"SQL注入尝试失败但暴露了数据库类型"、"XSS尝试被WAF拦截但暴露了WAF规则"
3. **扫描失败但揭示了防护**:如"端口扫描被防火墙拦截"、"目录枚举被限制"、"暴力破解被锁定"
4. **配置错误或环境问题**:如"工具配置错误"、"目标不可达"、"证书验证失败"等,这些可能揭示系统配置问题
5. **AI分析中的失败尝试**如果AI在对话中明确提到"尝试了X但失败了因为Y",这也应该被记录
**关键要求:**
1. **节点标签必须简洁明了**每个节点标签控制在15-25个汉字以内使用简洁的动宾结构
- action节点要描述"做了什么"和"发现了什么"(如"扫描端口发现22/80/443"、"验证SQL注入成功"、"WAF拦截暴露厂商"
- action节点要描述"做了什么"和"发现了什么"(如"扫描端口发现22/80/443"、"验证SQL注入成功"、"WAF拦截暴露厂商"、"SQLMap扫描失败工具未安装"
- 失败路径的标签应明确标注失败原因(如"尝试SQL注入被WAF拦截"、"端口扫描(连接超时)"
- 避免冗长描述关键信息放在metadata中详细说明
2. **严格控制节点数量**优先保留关键步骤避免生成过多细碎节点。理想情况下单个目标的攻击链应控制在8-15个节点以内
- 如果节点太多(>20个优先保留最重要的节点合并或删除次要节点
- 如果节点太多(>20个优先保留最重要的节点(包括重要的失败路径),合并或删除次要节点
- 合并相似的action节点如同一工具的连续调用如果结果相似
- 对于同一类型的多个发现,考虑合并为一个节点(如"发现多个开放端口"而不是为每个端口创建节点)
- **但不要因为节点数量限制而删除有价值的失败路径**
3. **确保DAG结构**生成的图必须是有向无环图DAG不允许出现循环。边的方向必须符合时间顺序和逻辑关系从早期步骤指向后期步骤
- 生成后必须检查确保图中不存在循环即不存在路径A→B→...→A
- 如果发现循环,必须断开形成循环的边,保留最重要的连接
4. **层次清晰**:攻击链应该呈现清晰的层次结构:目标 → 信息收集 → 漏洞发现 → 漏洞利用 → 后续行动
- **失败路径也应该正确连接到后续的成功路径**(如"尝试A失败" → "改用B方法成功"
4. **层次清晰**:攻击链应该呈现清晰的层次结构:目标 → 信息收集(包括失败的尝试) → 漏洞发现 → 漏洞利用 → 后续行动
## ⚠️ 重要原则 - 严禁杜撰
@@ -380,9 +396,14 @@ func (b *Builder) buildSimplePrompt(reactInput, modelOutput string) string {
**action行动****工具执行 + AI分析结果 = 一个action节点**
- 将每个工具执行和AI对该工具结果的分析合并为一个action节点
- **节点标签必须简洁**控制在15-25个汉字使用动宾结构描述"做了什么"和"发现了什么"
- 好的示例:"扫描端口发现22/80/443"、"验证SQL注入成功"、"WAF拦截暴露厂商"
- 成功示例:"扫描端口发现22/80/443"、"验证SQL注入成功"、"WAF拦截暴露厂商"
- **失败示例(必须保留)**"尝试SQL注入被WAF拦截"、"端口扫描(连接超时)"、"SQLMap扫描工具未安装"、"目录枚举(权限不足)"
- 避免冗长描述关键信息放在metadata中详细说明
- 若为失败但有线索的行动请在metadata.status中标记为"failed_insight"并在findings中写清线索价值
- **⚠️ 失败路径处理规则**
- **必须创建节点**如果工具执行失败但提供了任何线索、错误信息或指引必须创建action节点
- **标记失败状态**在metadata.status中标记为"failed_insight"并在findings中详细说明失败原因和获得的线索
- **说明线索价值**在ai_analysis中明确说明"为什么这个失败很重要"、"提供了什么信息"、"如何指引了后续行动"
- **连接后续节点**:失败路径应该连接到后续的成功路径,展示"失败 → 调整策略 → 成功"的完整过程
- **重要action节点必须关联到正确的target节点通过工具执行参数判断目标**
- **risk_score****action节点没有风险risk_score必须设置为0**只有vulnerability节点才有风险等级
@@ -398,9 +419,25 @@ func (b *Builder) buildSimplePrompt(reactInput, modelOutput string) string {
### 3. 过滤规则(重要!)
- **必须忽略**没有任何输出、没有线索的失败执行
- **必须保留**失败但提供关键线索的执行确保metadata里解释清楚
- 只保留对学习或溯源有帮助的节点
**必须忽略的失败执行(可以删除):**
- 完全没有输出、没有任何错误信息的失败
- 纯粹的系统错误(如"内存不足"、"磁盘满"等),且与测试目标无关
- 重复的、完全相同的失败尝试(只保留第一次)
**必须保留的失败执行(必须创建节点):**
- **工具执行失败但提供了线索**:如错误信息、超时、拒绝连接、权限错误等
- **漏洞验证失败但指明了方向**:如"SQL注入尝试失败但暴露了数据库类型"、"XSS被WAF拦截但暴露了WAF规则"
- **扫描失败但揭示了防护**:如"端口扫描被防火墙拦截"、"目录枚举被限制"、"暴力破解被锁定"
- **配置或环境问题**:如"工具未安装"、"目标不可达"、"证书验证失败"等,这些可能揭示系统配置问题
- **AI明确分析的失败尝试**如果AI在对话中明确提到"尝试了X但失败了因为Y",必须记录
**判断标准:**
- 如果失败提供了**任何**有助于理解系统、调整策略或学习的信息,就必须保留
- 如果失败揭示了**任何**关于目标系统、防护机制或环境配置的信息,就必须保留
- 如果失败指引了**后续的成功尝试**,就必须保留并建立连接关系
- **宁可多保留一些失败路径,也不要遗漏有价值的线索**
**只保留对学习或溯源有帮助的节点**:包括成功路径和重要的失败路径
### 4. 关联关系确保DAG结构
@@ -426,9 +463,15 @@ func (b *Builder) buildSimplePrompt(reactInput, modelOutput string) string {
**action节点metadata必须包含**
- tool_name: 工具名称必须与ReAct中的tool_calls一致
- tool_intent: 工具调用意图(如"端口扫描"、"漏洞扫描"、"目录枚举"等)
- ai_analysis: AI对工具结果的分析总结不超过100字,失败节点需解释线索价值
- findings: 关键发现列表(数组,如["发现80端口开放", "检测到WAF"]
- status: 可选,若为失败但有线索的行动,标记为"failed_insight"并在findings中写清线索价值
- ai_analysis: AI对工具结果的分析总结不超过150字
- **成功节点**:总结关键发现和结果
- **失败节点****必须详细说明**:①失败的具体原因 ②获得了什么线索或信息 ③这些线索如何指引了后续行动 ④为什么这个失败很重要
- findings: 关键发现列表(数组)
- 成功节点:如["发现80端口开放", "检测到WAF"]
- **失败节点**:必须包含失败原因和获得的线索,如["WAF拦截SQL注入尝试", "返回403错误", "目标部署了Web应用防火墙"]
- status:
- 成功节点:可以不设置或设置为"success"
- **失败节点:必须标记为"failed_insight"**,表示失败但提供了有价值的线索
**target节点metadata必须包含**
- target: 测试目标URL、IP、域名等
@@ -474,8 +517,34 @@ func (b *Builder) buildSimplePrompt(reactInput, modelOutput string) string {
"metadata": {
"tool_name": "sqlmap",
"tool_intent": "SQL注入测试",
"ai_analysis": "sqlmap工具未安装无法进行SQL注入测试需要先安装工具",
"findings": ["工具未安装需要先安装sqlmap工具"],
"ai_analysis": "sqlmap工具未安装无法进行SQL注入测试。这个失败揭示了测试环境的工具配置情况,需要先安装工具才能继续测试。",
"findings": ["工具未安装需要先安装sqlmap工具", "环境配置限制缺少SQL注入测试工具"],
"status": "failed_insight"
}
},
{
"id": "node_5",
"type": "action",
"label": "尝试SQL注入被WAF拦截",
"risk_score": 0,
"metadata": {
"tool_name": "manual_test",
"tool_intent": "SQL注入验证",
"ai_analysis": "尝试SQL注入攻击时被WAF拦截返回403错误。这个失败提供了重要线索目标部署了WAF防护且WAF规则较为严格。后续可以尝试绕过WAF或寻找其他攻击面。",
"findings": ["WAF拦截SQL注入尝试", "返回403错误", "目标部署了Web应用防火墙"],
"status": "failed_insight"
}
},
{
"id": "node_6",
"type": "action",
"label": "端口扫描(连接超时)",
"risk_score": 0,
"metadata": {
"tool_name": "nmap",
"tool_intent": "端口扫描",
"ai_analysis": "对目标进行端口扫描时多个端口连接超时。这个失败表明目标可能部署了防火墙或IDS对扫描行为进行了检测和拦截。超时信息有助于了解目标的防护策略。",
"findings": ["多个端口连接超时", "可能部署了防火墙或IDS", "目标对扫描行为有防护"],
"status": "failed_insight"
}
},
@@ -518,6 +587,19 @@ func (b *Builder) buildSimplePrompt(reactInput, modelOutput string) string {
**再次强调如果没有实际数据返回空的nodes和edges数组。严禁杜撰**
## ⚠️ 关于失败路径的最后提醒
**请特别注意在生成攻击链时不要只关注成功的路径也要仔细检查ReAct输入中的所有失败尝试。**
**检查清单(在生成节点前,请逐一检查):**
1. ✅ 是否所有工具执行失败都被检查过了?
2. ✅ 每个失败是否提供了线索、错误信息或指引?
3. ✅ 失败路径是否连接到了后续的成功路径?
4. ✅ 失败节点的metadata是否详细说明了线索价值
5. ✅ 是否因为节点数量限制而误删了重要的失败路径?
**记住:一个完整的攻击链应该展示真实的渗透测试过程,包括成功和重要的失败尝试。失败路径不是噪音,而是宝贵的经验和学习材料!**
只返回JSON不要包含其他解释文字。`, reactInput, modelOutput)
}