exploit-suggest · diff
git:20260802.c3cfa70 to git:20260811.eedfbb7
3 added, 6 removed. Audit A to A.
---
name: exploit-suggest
description: 当用户希望基于命中的指纹获取漏洞利用建议时使用。该 skill 读取一组 fingerprintId 对应的 info.vulnerabilities 元数据,按风险等级排序输出可利用方向、对应 CVE、可调用的 exploit skill 与人工跟进项,不直接执行任何利用动作。
---
# 基于指纹的漏洞利用建议
使用这个 skill,在指纹扫描命中后,对相关指纹生成结构化的漏洞利用建议。skill 只产出"做什么"的方案,不直接调用任何利用类工具,真正的利用动作由用户或后续 puppet-node 侧 exploit-* skill 完成。
## 适用场景
- 用户已经在某个 puppet 上完成指纹扫描,需要根据命中清单决定下一步动作。
- 用户拿到一批 fingerprintId,想知道每个对应的已知漏洞和现成 skill。
- 用户在做攻击面评估,需要把命中指纹翻译成漏洞列表。
不适用:
- 用户尚未做指纹扫描 → 应先引导调用 puppet-node 侧的指纹扫描功能。
- 用户希望直接执行漏洞利用 → 转交对应 `exploit-*` skill。
- 用户需要修改/编写指纹规则 → 转交 `develop-fingerprint` skill。
## 可用工具
- 来自 `platform_fingerprint_agent` (对应 `FingerprintTools`):
+ 由 `FingerprintTools` 提供:
- `listFingerprints(protocol?)`: 获取全部指纹摘要或按协议筛选。
- `getFingerprintById(fingerprintId)`: 获取单条指纹完整对象,**vulnerabilities 在 `info.vulnerabilities` 字段下**。
本 skill 只读不写,不要调用 `saveFingerprint` / `deleteFingerprint`。
## 工作流程
### 执行前:制定计划
- 在第一次调用工具前,输出以下三项:
-
- 1. **要干什么**:列出要为哪些 fingerprintId 生成建议。
- 2. **要怎么干**:按"逐个 getFingerprintById → 提取 vulnerabilities → 分级汇总 → 输出建议"顺序执行。
- 3. **干到什么程度结束**:所有目标指纹处理完,输出最终建议清单。
+ 处理多个 fingerprintId 或存在反查、提取、分级汇总等依赖阶段时调用 `createPlan`;
+ 单个明确 fingerprintId 的只读查询直接执行,不额外输出固定计划模板。
---
### 1. 确认输入
- 用户给出 fingerprintId 列表:直接进入步骤 2。
- 用户只给出指纹名称/产品名:先调用 `listFingerprints(protocol?)` 反查 fingerprintId。
- 用户没有给任何上下文:询问"想为哪些命中的指纹生成漏洞建议?",不要猜测。
### 2. 拉取指纹元数据
对每个 fingerprintId 调用 `getFingerprintById(fingerprintId)`,获取完整对象。需要从中提取:
- `name`、`info.version`:用于标识
- `info.vulnerabilities`:漏洞数组,可能不存在
如果 `getFingerprintById` 抛 `FingerprintNotFoundException`,记录为"未找到",继续处理其余指纹,不要中断。
### 3. 提取与分级
对每条指纹的 `info.vulnerabilities` 数组:
- **数组缺失或为空**:标记为"无已知漏洞情报",不要凭模型记忆补充 CVE。
- **数组非空**:按 `severity` 排序,顺序为 `critical > high > medium > low > 未分级`。
对每条 vulnerability 提取:
| 字段 | 用途 |
|------|------|
| `title` | 漏洞简称(必有) |
| `severity` | 优先级 |
| `cve` | 标注是否有官方编号 |
| `description` | 利用方式概述 |
| `exploitSkill` | 是否有对应的自动化 skill |
| `references` | 参考链接 |
### 4. 分组与建议
按是否有 `exploitSkill` 分两组:
- **可自动化**:有 `exploitSkill` → 建议下一步可在 puppet-node 侧调用对应 skill。仅给出 skill 名称,不要假设 skill 的参数细节。
- **需人工跟进**:无 `exploitSkill` → 仅作情报展示,根据 description 提示人工需要确认的点。
### 5. 不要做的事
- 不要凭模型训练知识补全 vulnerabilities 数组里未列出的 CVE 或漏洞。
- 不要假设 `exploitSkill` 字段里的 skill 一定存在,只是把它转告用户/上层调度。
- 不要在建议里给出具体 payload 或 exploit 代码。
- 不要主动尝试执行任何利用工具。
## 输出格式
最终回复保持简洁、结构化,包含:
1. **计划**:目标 fingerprintId 列表和处理步骤(开头一次性说清)
2. **指纹清单**:对每个指纹,输出一段:
```
### {name} ({fingerprintId})
- 版本: {info.version}
- 已知漏洞: {N 条}
- [严重] {title} (CVE-2016-4437) — 可调用 exploit-shiro-post
描述: ...
- [高危] {title} — 需人工跟进
描述: ...
- 未找到对应指纹文件 / 无已知漏洞情报 (二选一,无漏洞时显示)
```
3. **汇总**:
- 可自动化利用: 列出涉及的 skill 名称及对应漏洞
- 需人工跟进: 列出对应 (fingerprint, title) 列表
- 总计: critical {x} 条, high {y} 条, medium {z} 条, low {w} 条
4. **下一步建议**:根据汇总给出 1~2 条具体建议:
- 有可自动化 skill → "可在 puppet 上依次调用 skill X / Y, 优先处理 critical 级别"
- 全部需人工 → "建议人工逐条评估 description, 决定是否需要继续渗透"
- 没有任何漏洞情报 → "命中指纹未携带漏洞元数据, 建议补充 vulnerabilities 字段, 可使用 develop-fingerprint skill"
## 示例
用户输入: "已经命中 shiro_1_x 和 nginx_1_x,请给建议"
期望输出骨架:
```
计划: 为 shiro_1_x、nginx_1_x 生成漏洞利用建议。
步骤: getFingerprintById x2 → 提取 vulnerabilities → 分级汇总。
### shiro (shiro_1_x)
- 版本: 1.x
- 已知漏洞: 2 条
- [严重] RememberMe Cookie 反序列化 RCE (CVE-2016-4437) — 可调用 exploit-shiro-post
描述: 默认 Key 可预测,构造恶意 cookie 触发反序列化命令执行。
- [高危] Shiro 权限绕过 (路径穿越) (CVE-2020-1957) — 需人工跟进
描述: Shiro 与 Spring 集成时,/xxx/..;/admin/yyy 可绕过权限校验。
### nginx (nginx_1_x)
- 版本: 1.x
- 无已知漏洞情报
汇总:
- 可自动化利用: exploit-shiro-post (1 条: RememberMe 反序列化)
- 需人工跟进: shiro_1_x 的路径穿越
- 总计: critical 1, high 1, medium 0, low 0
下一步建议: 优先在受影响 puppet 上调用 exploit-shiro-post 处理 critical 项,
再人工评估路径穿越是否需要继续利用。
```
## 错误处理
| 情况 | 处理 |
|------|------|
| getFingerprintById 抛 FingerprintNotFoundException | 输出"未找到对应指纹文件",继续下一个 |
| getFingerprintById 抛其他异常 | 报告异常信息,跳过该项,继续 |
| 用户提供的 fingerprintId 全部无效 | 提示用户核对 ID,建议先调用 listFingerprints 查清单 |
| 全部指纹都没有 vulnerabilities | 汇总里说明"所有命中指纹均未携带漏洞情报",建议用 develop-fingerprint 补充 |