一句话:挖到漏洞只完成了一半,写出能让开发看懂、愿意改、改得动的报告,才是交付。

一、为什么报告环节最值得用 AI

渗透测试工程师最耗时的工作不是挖洞,是:

  • 整理几十个漏洞的复现步骤
  • 写修复建议
  • 做风险评级
  • 翻译成甲方能看懂的语言
  • 反复修改格式

这些都是语言密集型工作,正好是 LLM 的主场。 报告环节的效率提升普遍能做到 5 倍以上。

二、标准漏洞报告的结构

一份合格的漏洞报告条目应包含:

### 漏洞名称
- **危害等级**:高危 / 中危 / 低危
- **CVSS 评分**:x.x
- **漏洞类型**:OWASP 分类
- **影响范围**:URL / 接口 / 参数
- **漏洞描述**:一段话讲清是什么
- **复现步骤**:可被他人独立复现
- **请求/响应证据**:原始报文
- **危害证明**:实际能读到什么数据
- **修复建议**:具体到代码层
- **参考链接**:CWE / CVE / 官方文档

AI 可以把你潦草的笔记一键补全成这个结构。

三、从笔记到报告的 Prompt

# 任务
把以下测试笔记整理成标准漏洞报告条目。

# 已有信息
- 目标:https://target.example.com/api/user/profile
- 发现:用 A 账号 token 请求 B 账号 id,返回了 B 的完整信息
- 请求:
  GET /api/user/1002/profile HTTP/1.1
  Authorization: Bearer <A的token>
- 响应:200,返回 {"id":1002,"name":"张三","phone":"138****","idcard":"..."}

# 要求
1. 按标准结构输出(见模板)
2. 危害等级要给出理由
3. 修复建议要具体到伪代码层面
4. 描述用简洁专业的中文,避免夸张

# 注意
不要编造我没提供的信息(如 CVE 编号、影响用户数)

AI 会输出完整的报告条目,包括:

  • 判定为高危(水平越权,泄露 PII)
  • CVSS:AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N = 6.5
  • 修复建议:在查询前校验 order.userId == currentUser.id

四、让 AI 做风险评级

# 任务
对以下漏洞进行定级,给出 CVSS 3.1 向量和分数,并说明理由。

# 漏洞清单
1. 未授权访问 /api/admin/export,可导出全部用户手机号
2. 存储型 XSS 在客服后台工单列表
3. 接口返回详细错误堆栈
4. 登录无验证码,可爆破

# 输出
| 漏洞 | CVSS 向量 | 分数 | 等级 | 理由 |

关键:让 AI 明确列出 CVSS 向量(AV/AC/PR/UI/S/C/I/A),这样评级可复核,而不是拍脑袋。

五、修复建议的质量

新手写的修复建议:"请加强输入校验" —— 这种建议开发看了想打人。

让 AI 写具体建议:

# 任务
针对"水平越权读取用户信息",给出:
1. 根因说明(为什么会越权)
2. 代码层修复方案(给 Java / Node / Python 三种伪代码)
3. 框架层方案(如 Spring Security 注解)
4. 长期治理建议(统一鉴权中间件)

# 要求
不要写"加强校验"这种空话,要给出可落地的代码。

AI 输出示例:

// 错误示范(现状)
User u = userMapper.selectById(id);

// 正确做法
User u = userMapper.selectById(id);
if (u == null || !u.getId().equals(currentUser.getId())) {
    throw new ForbiddenException("无权访问");
}
// 框架层:用 @PreAuthorize 统一管控
@PreAuthorize("#id == authentication.principal.id")
public User getProfile(Long id) { ... }

具体到代码的修复建议,是报告质量的直接体现。

六、批量生成:报告流水线

def generate_report(findings: list[dict]) -> str:
    """把结构化 findings 批量转成 Markdown 报告"""
    
    # 1. 先让 AI 做整体风险概览
    overview = llm.chat(f"""
        以下是本次测试发现的漏洞摘要:
        {json.dumps(findings, ensure_ascii=False)}
        
        请生成"执行摘要":
        1. 整体安全状况评价(2-3句)
        2. 高危漏洞概述
        3. 按风险排序的修复优先级
        保持客观,不夸大不缩小。
    """)
    
    # 2. 逐条生成详情(可并行)
    details = []
    for f in findings:
        detail = llm.chat(f"""
            把这条发现整理成标准漏洞报告条目:
            {json.dumps(f, ensure_ascii=False)}
            
            要求:结构完整、证据充分、修复建议具体。
            缺失信息标注"待补充",不要编造。
        """)
        details.append(detail)
    
    # 3. 汇总
    return f"# 渗透测试报告\n\n## 一、执行摘要\n{overview}\n\n## 二、漏洞详情\n" + "\n\n".join(details)

七、AI 做质量审核(重要)

写完后让 AI 当审查员:

# 任务
你是报告质量审查员。审查以下漏洞报告,找出问题。

# 检查清单
1. 复现步骤是否足够完整(换个人能否复现)?
2. 证据是否充分(有没有请求响应)?
3. 危害描述是否有夸大("可导致整个系统被控制"这类没有证据支撑的)?
4. 修复建议是否具体可执行?
5. 是否存在自相矛盾的评级?
6. 有没有可能被质疑为误报的地方?

# 输出
逐条列出问题 + 修改建议。

这一步能发现大量低级错误:漏了响应包、评级和描述不匹配、复现步骤缺前置条件等。

八、报告里的常见坑(AI 能帮你避)

后果 AI 如何帮
危害夸大 失去信任 审核环节强制标注"证据不足"
复现步骤不全 开发无法验证 让 AI 模拟"照做一遍"找缺失
修复建议空泛 无法落地 强制产出代码
评级不一致 显得不专业 AI 复核 CVSS 向量
残留测试数据 法律风险 提醒清理
敏感信息泄露 报告本身成风险 AI 扫描报告里的真实凭据

九、让 AI 写"给不同读者看"的版本

同一个漏洞,要写给三类人:

# 任务
把以下漏洞改写成三个版本:
1. 给管理层的:一页纸,讲风险和对业务的影响,不出现技术细节
2. 给开发的:完整技术细节和修复代码
3. 给运维的:临时缓解措施(WAF 规则、访问控制)

这个能力人工做要花很多时间,AI 几秒完成。

十、注意事项

  1. AI 不能替你担责:报告结论由签字人负责,AI 只是辅助
  2. 必须人工复核:AI 会编造 CVE 编号、编造影响数据
  3. 敏感信息处理:报告中涉及的真实数据要脱敏
  4. 保持你的风格:训练 AI 用你的模板和话术,而不是通用模板

十一、小结

报告环节是 AI 落地渗透测试收益最直接、风险最低的场景:

环节 效率提升
笔记 → 结构化条目 10x
CVSS 评级 3x
修复建议撰写 5x
多版本改写 10x
质量审核 2x(但能避坑)

把 AI 用在这里,几乎零风险,收益立竿见影。如果你今天只想尝试一件事,就从这里开始。

下一篇:AI 辅助 CVE 分析与漏洞复现。


系列文章:AI 渗透测试与漏洞挖掘实战