| name | exploit-suggest |
| description | 当用户希望基于命中的指纹获取漏洞利用建议时使用。该 skill 读取一组 fingerprintId 对应的 info.vulnerabilities 元数据,按风险等级排序输出可利用方向、对应 CVE、可调用的 exploit skill 与人工跟进项,不直接执行任何利用动作。 |
| tags | ["platform","exploit","fingerprint"] |
基于指纹的漏洞利用建议
使用这个 skill,在指纹扫描命中后,对相关指纹生成结构化的漏洞利用建议。skill 只产出"做什么"的方案,不直接调用任何利用类工具,真正的利用动作由用户或后续 puppet-node 侧 exploit-* skill 完成。
适用场景
- 用户已经在某个 puppet 上完成指纹扫描,需要根据命中清单决定下一步动作。
- 用户拿到一批 fingerprintId,想知道每个对应的已知漏洞和现成 skill。
- 用户在做攻击面评估,需要把命中指纹翻译成漏洞列表。
不适用:
- 用户尚未做指纹扫描 → 应先引导调用 puppet-node 侧的指纹扫描功能。
- 用户希望直接执行漏洞利用 → 转交对应
exploit-* skill。
- 用户需要修改/编写指纹规则 → 转交
develop-fingerprint skill。
可用工具
来自 platform_fingerprint_agent (对应 FingerprintTools):
getFingerprints(): 获取全部指纹摘要。
getFingerprintsByProtocol(protocol): 按协议筛选。
getFingerprintById(fingerprintId): 获取单条指纹完整对象,vulnerabilities 在 info.vulnerabilities 字段下。
本 skill 只读不写,不要调用 saveFingerprint / deleteFingerprint。
工作流程
执行前:制定计划
在第一次调用工具前,输出以下三项:
- 要干什么:列出要为哪些 fingerprintId 生成建议。
- 要怎么干:按"逐个 getFingerprintById → 提取 vulnerabilities → 分级汇总 → 输出建议"顺序执行。
- 干到什么程度结束:所有目标指纹处理完,输出最终建议清单。
1. 确认输入
- 用户给出 fingerprintId 列表:直接进入步骤 2。
- 用户只给出指纹名称/产品名:先调用
getFingerprints() 或 getFingerprintsByProtocol(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 代码。
- 不要主动尝试执行任何利用工具。
输出格式
最终回复保持简洁、结构化,包含:
- 计划:目标 fingerprintId 列表和处理步骤(开头一次性说清)
- 指纹清单:对每个指纹,输出一段:
### {name} ({fingerprintId})
- 版本: {info.version}
- 已知漏洞: {N 条}
- [严重] {title} (CVE-2016-4437) — 可调用 exploit-shiro-post
描述: ...
- [高危] {title} — 需人工跟进
描述: ...
- 未找到对应指纹文件 / 无已知漏洞情报 (二选一,无漏洞时显示)
- 汇总:
- 可自动化利用: 列出涉及的 skill 名称及对应漏洞
- 需人工跟进: 列出对应 (fingerprint, title) 列表
- 总计: critical {x} 条, high {y} 条, medium {z} 条, low {w} 条
- 下一步建议:根据汇总给出 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,建议先调用 getFingerprints 查清单 |
| 全部指纹都没有 vulnerabilities | 汇总里说明"所有命中指纹均未携带漏洞情报",建议用 develop-fingerprint 补充 |