mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-04-02 01:00:35 +02:00
Add files via upload
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user