# md 完整技术报告模板

> 由 Audit Agent 在阶段 3 读取，用于生成内部完整技术报告。

---

## 报告生成

通过审计后产出**两类报告**,同目录同名不同后缀:

```
{工作目录}/pentest-report/{project-id}-{系统名}-pentest-{YYYYMMDD}.md     ← 完整技术报告(内部)
{工作目录}/pentest-report/{project-id}-{系统名}-pentest-{YYYYMMDD}.docx   ← 交付件(给客户)
```

- **md 完整技术报告**:项目信息 + 账号矩阵 + 功能测试明细 + 覆盖率 + 漏洞详情 + 盲区 + 修复建议。按下方结构组织,直接 Write 保留。
- **docx 交付件**:聚焦漏洞的黑盒复现,无覆盖率/项目信息/参考信息,修复建议简述。详见 `r/006.txt`。

**系统名**从 URL 或用户说明提取,英文小写连字符分隔。禁止用 `security-report` 等通用名。日期通过 Bash `date +%Y%m%d` 获取。

### md 报告结构(完整技术报告,直接 Write 保留)

```markdown
# {系统名} 渗透测试报告

> 目标:`https://...`
> 系统/产品/版本:...(含框架、基础设施、WAF、认证模型等关键指纹)
> 测试时间:YYYY-MM-DD
> 测试方法:基于功能威胁建模(12 维度)逐项验证,非套用固定漏洞清单

> 注:md 首部必须是 `# 标题` + 以上 `>` 引用块 + `---`,docx 封面从这里解析。

---

## 1. 测试概述
   - 目标、范围、时间
   - 测试方法(说明:基于功能威胁建模,逐项验证;非套用固定漏洞清单)
   - **整体结论**:一句话点出防护水位 + 确认漏洞统计(如"确认 N 个漏洞:严重 x / 高危 y / 中危 z / 低危 w")+ 根因摘要

## 1.1 测试账号与角色(从 pool.json 提取)

| # | 角色 | 账号 | 用户ID | 权限 | 状态 | 用途 |
|---|------|------|--------|------|------|------|

**账号配对矩阵**:

| 攻击方 ↓ / 受害方 → | admin | user1 | user2 |
|--------------------|-------|-------|-------|

## 2. 功能测试明细(主体)

按模块 → 功能组织。每个功能列出:

### 2.x {模块名} / {功能名} (`feature_id`)

- **访问路径**:登录 → 仪表盘 → ... → 功能入口
- **关联 API**:PUT /api/user/{id} 等
- **威胁建模**(识别了 N 个潜在威胁):
  - T1 `IDOR-编辑他人订单` — 理由:id 参数客户端可控,后端未在响应体现归属校验
  - T2 `垂直越权-普通用户访问管理接口` — 理由:路径 /admin/ 暗示需管理员
  - ...
- **测试结果**:

  | Threat | 威胁类型 | 结果 | 证据 |
  |--------|---------|------|------|
  | T1 | IDOR-编辑他人用户 | ❌ confirmed | [VULN-001 详情](#vuln-001) |
  | T2 | 垂直越权 | ✅ safe | 普通用户访问返回 403 |
  | T3 | 批量赋权 | ✅ safe | role 字段被后端忽略 |

- **未测项 / 盲区**(如有):T4 并发竞态 — NEEDS — 缺并发工具

## 3. 系统级审计
   - CORS / 安全响应头 / 调试端点 / 版本泄露 / Console / WAF 各项发现

## 4. 漏洞统计概览
   - 按风险等级统计
   - WAF 防护效果

## 5. 漏洞详情(每个 confirmed 漏洞)
   - 编号(VULN-xxx)/ 类型(沿用 threat_model 中的 vuln_type)/ 等级 / CVSS 量化评分
   - 模块 + 功能点名称 + feature_id
   - access_path(完整访问链)
   - 复现步骤(每步附 URL + **BurpSuite 原始 HTTP 请求包** + 响应包;关键参数用 `【】` 标注)
   - PoC 与证据(越权类必须 **baseline vs attack 对比**)
   - 业务影响(**量化**:影响用户量级 / 可遍历 ID 范围 / 可造成最大危害)
   - 修复建议(**短期止血** + **长期加固**)

   **本节严格排除**:CORS 配置 / Host 头 / 缓存投毒 / HTTP 请求走私 / 安全响应头缺失 / 其他请求响应头配置不当。这些统一在第 3 节系统级审计里描述。

## 6. 攻击链(如适用)

## 7. 高可疑点
   - 类型 / 位置 / 当前证据 / 缺失条件

## 8. 完整盲区清单
   | Feature | 威胁类型 | 状态 | 原因 |
   状态只用 BLOCKED/NEEDS/N/A

## 9. 修复建议(按 P0/P1/P2/P3 排序)

## 10. 附件索引
```

---

## 写作规范

报告面向客户/SRC 交付,语言和格式必须可复现、可量化、可交付。

### 语言风格

- **客观陈述**:不用"我发现"/"我认为",用"经测试发现"/"存在"/"可被"
- **量化影响**:不说"大量用户受影响",说"影响约 X 万用户"或"可遍历 ID 范围 1-99999";不说"严重泄露",说"泄露 N 条 PII / X 个内部包"
- **证据闭环**:每个主张对应到具体请求/响应;每个 confirmed 漏洞有完整请求 + 响应 + 业务影响验证
- **步骤可复现**:第三方照步骤操作能 100% 复现;对象 ID 等用实测值,不留占位符

### 数据包格式

- 必须 **BurpSuite 原始 HTTP 请求格式**(不是 curl 命令,不是 JSON 片段)
- **不脱敏**:报告内保留完整凭据(Cookie/Token/手机号),复现需要;脱敏在交付环节处理(加密/内网传输,见「交付后」)
- 关键参数用 `【】` 标注,如 `userId=【12345】`、`{"id":【5】}`
- 链式漏洞按顺序给多个数据包,标注 `请求 1 → 请求 2 → ...`
- 越权类必须 **baseline vs attack 对比**(正常请求 vs 攻击请求,标出差异点)

### 等级判定标准(写入 summary.json 与报告 risk_level)

- **critical(严重)**:RCE / 账号接管 / 批量数据泄露(>1万条 PII) / 资金损失 / 核心权限沦陷
- **high(高危)**:越权(读+写) / SQL 注入(可出数据) / 任意用户登录 / 支付绕过 / 反序列化 RCE(执行达成)
- **medium(中危)**:越权(仅读) / 存储型 XSS / SSRF(无回显) / 信息泄露(少量/单条) / 反序列化攻击面(执行未达成)
- **low(低危)**:反射型 XSS / CSRF(低危操作) / 点击劫持 / Open Redirect / 未授权信息泄露(配置/指纹类)
- **info**:无独立可利用危害的观察项(**不计入 confirmed_vulns**,进第 3 节系统级审计)

### CVSS 量化(仅 md 报告,docx 交付件不含)

每个 confirmed 漏洞给 CVSS 3.1 向量 + 评分,格式:`8.1 High (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N)`。不确定时查 [FIRST CVSS 计算器](https://www.first.org/cvss/calculator/3.1)。

### 排除项(不进 confirmed_vulns,不分配 VULN 编号)

- CORS 宽松 / Host 头 / 缓存投毒 / 请求走私 / 安全响应头缺失 等纯配置项 → 第 3 节系统级审计
- **测试设定**:测试专用规律码 / 弱口令 / Mock 数据 / 默认演示账号 —— 是测试环境设定,不是产品漏洞,不写进报告漏洞

### docx 交付件语言(去 AI 化)

- 去套话:删"经测试发现""证据链完整""符合 X 判定标准""综上所述"等模板化连接词,直接陈述事实
- 短句直白:用"admin 账号使用默认口令 admin123",不用"经授权安全测试发现,该系统存在...的问题"
- 复现步骤写动作(访问 / 抓取 / 提交 / 确认),不写"我们注意到""值得注意的是"
- 影响用具体数字(5800 名员工、total=5800),不用"大量""众多""严重"
- 不自我点评:不写"危害极大""风险不容忽视",让事实说话
