name: report description: 确认漏洞后产出正式 SRC/0day 提交稿 DOCX 报告的收口 skill。仅在漏洞已确认、准备成稿时使用——负责查重、过分层验证门、按固定 DOCX 骨架生成报告(Heading 2 章节 + Step 式 PoC + 内嵌真实截图)、语义化命名、放对目录、处理驳回追加。不负责挖掘/验证漏洞本身。TRIGGER:用户说"写报告/出报告/成稿/提交稿/生成漏洞报告",或漏洞已验证到位准备交付时;或 /report。EN: Turns confirmed vulnerabilities into submission-ready DOCX reports for SRC/0day platforms (verification gates, fixed layout, step-style PoC, mandatory real screenshots). Trigger on "write report" or /report.
report — 漏洞报告成稿收口
EN: This skill turns confirmed vulnerabilities into submission-ready DOCX reports. The body is in Chinese because the target platforms (Chinese SRCs, CNVD/CNNVD, EDUSRC) require Chinese reports; the methodology is language-agnostic. See README.md for an English overview.
这是薄编排层,只做一件事:把已确认的漏洞写成可直接提交给审核方的 DOCX 提交稿。 漏洞怎么挖、怎么验证不在本 skill 范围;但"什么漏洞够格写成报告"的分层验证门已内联在本文,自成一体。
何时用 / 何时不用
- ✅ 用:漏洞已确认(硬门过了)、准备成稿交付、扩大危害后更新报告、被驳回后追加申诉。
- ❌ 不用:还在挖 / 还在验证 / 只有单点信号没到终局 → 继续验证,别急着开报告。
前置铁律:无 PoC = 不存在漏洞;影响没落地到链路终局 = 不写报告。P3 以下不写。
分层验证门(成稿前必过,本 skill 自带完整判据)
分两层:硬门(所有漏洞必过,缺一不报)+ 按类型命门(不同类型的"关键钥匙")+ 质量项(尽力,不卡报告)。
硬门(所有漏洞必过,缺一不报)
- 先证伪(正常功能排除) — 先假设"这就是正常功能",主动跑否定实验去推翻它:未授权→用
zzz不存在<时间戳>跑同协议,看是不是 catch-all/公开/样例;越权→用合法 body 重测排除 400 假阳性、POST 排除 SPA 回退;SSRF→确认是不是服务端正常连接功能而非越过边界。证伪不掉,才可能是漏洞;证伪掉了,作废不报。 - PoC 可复现 — 能直接粘贴 Burp 原始请求块,不需要额外解释上下文。
- 真实业务影响(链路终局,危害要实际打出来) — 拿到别人的 ≥3 个敏感字段真实数据 / 操作真实生效改了别人业务状态 / 凭证实际访问到敏感内容。是数据泄露/账户接管/资金损失/服务端 RCE/内网横向的终局结果,不是中间信号(文档/token/拓扑泄露不是终点),不是"理论上有风险"。打不出实际危害 = 信号作废 = 不报。
- 服务端/权限边界确认 — 是服务端或权限边界问题,不是浏览器 JS 假象/调试功能/页面渲染。
- 类型命门 — 命中下方按类型命门表中对应行的硬条件。
- 链式追问到终局 — 已顺根因穷举同类接口 + 纵深追到危害边界(不是问一层就交),或已记录"为什么到此为止"。
按类型命门表(不同类型,关键钥匙不同)
| 漏洞类型 | 命门(硬条件) |
|---|---|
| 数据泄露 | 别人的数据 + ≥3 敏感字段 + 非公开/非样例/非模板;自己测试账号数据 ≠ 漏洞 |
| 越权 / IDOR | A/B 交叉证明:A 拥有的资源,B 的 token 能读/改;只读到自己不报 |
| RCE / 命令执行 | 真实命令执行实证;"别人的数据"对 RCE 天然不适用,能执行命令本身就是危害 |
| SSRF | 服务端发出(回调 UA 证明 Java/Go/Python,非客户端 JS fetch)+ 有官方靶场必须先过靶场(不过不收);无靶场必须回显内网数据(云元数据/内网服务 banner/内网页面内容)。DNSlog 只是其中一步:出网响了 = 敲门砖,必须继续打到回显/危害终点,仅 dnslog 记录直接交 = 半成品不收 |
| 认证绕过 / ATO | 任意用户可绕过/接管,不只证明自己能登自己号;OAuth/JWT/密码重置逻辑要 A/B 双账号证明 |
| 业务逻辑 / 资金 | 操作真实生效 + 影响的是他人业务状态(金额/订单/状态机跳转),不是自己测试数据 |
| 文件上传 | 造成实际效果才算:webshell 可执行(getshell)或存储型 XSS 触发(HTML/SVG 被服务端解析);只传上去/能访问但纯存储不解析 = 不成立 |
| 注入 (SQL/NoSQL/SSTI/XXE) | 有确定输出/副作用证明(错误回显、时间差、OOB marker),不是"报错就报";SQL 注入最低共识 = 注出库名 database()(盲注需时间差 + 库名内容,特殊情况另议) |
质量项(不卡报告,写进报告说明即可)
- 否定实验:对存疑结论写出"如果这不是漏洞,最可能的解释"并执行证伪。
- 跨环境复现:两个 IP/浏览器/账号/机器之一复现。
- WAF/防护绕过已记录:有防护→试了哪些绕过→结果;无防护→说明确认方式。
0day / 通用产品漏洞:收录审查门(按 0day 成稿前必过)
各收录平台(CNNVD/CNVD/补天/厂商 SRC 等)规则取最严并集,任一否决项命中 = 不按 0day 成稿。
A. 版本与公开性(最新版不带洞 = 不是 0day)
- 漏洞在厂商当前最新版仍存在:GitHub 漏洞文件引入时间 vs 最新 release tag 日期对比 / 官网下载最新版实测 / 厂商安全公告与 changelog 检索,三选一。只在未发布分支或老版本存在 → 不按 0day 成稿
- 老版本洞例外:最新版已修但老版本测绘存量巨大 → 报告必须写清受影响版本范围 + 修复版本 + 修复 commit/版本对比证据
- 未完全公开:无 CVE/CNVD/CNNVD 编号、无公开 PoC/分析文章/厂商公告;OEM/同源源码产品任一已公开 = 全线视为公开
- 产品本身三年内官方有更新维护(废弃/测试/演示系统不收)
B. 类型与前提(平台明文不收的类型,一票否决)
- 非通用型弱口令/默认口令;非"需账号密码/验证码登录后台为前提";非用户配置不当/主动暴露;非沙箱预期功能 RCE;非单纯盲注/仅延时无明确危害;非未越权的 DOM/反射 XSS
- 同根因多个同类问题并为一洞;同系统相似类型历史只发一次
- 危害已实证(数据/权限/RCE 终局),非"存在可能性"
C. 案例与证据
- 黑盒底线 ≥10 互联网案例(3 个详细 + 10 个以上其他);目标高奖金档位需更多独立 IP(按目标平台档位对齐,成稿前如实告知预期档位)
- 证据 2 周内(事件型 3 天内)+ 保留时间戳;案例 IP 提交时现场验证存活
- 测绘语法精准 + 独立 IP 数 + 统计来源与时间进报告
- 白盒另需:代码审计/逆向过程 + 准确版本号 + 当前最新版本证明 + 待测试程序
D. 投递纪律(诚信红线)
- 一洞只交一家(多交会被各平台拉黑/信用评估)。交前定主平台路由:未授权前台 RCE → 通用漏洞高奖金平台;认证绕过/文件读取/凭证泄露等非 RCE → CNNVD/CNVD 类;老版本洞 → CNVD/CNNVD 类;教育行业资产 → EDUSRC
- 附件齐套:Word 报告 + POC/EXP + 待测试程序 + 复现录屏(按目标平台要求)
核心写作标准:双重可读(每份报告都要同时做到)
报告必须同时满足两个维度,缺一份都不合格:
① 小白可复现 —— 让完全不懂安全的审核者也能照着一步步复现出来:
- 每个 Step 让人看懂:做什么 → 在哪个 URL 操作 → 实际看到什么结果;不跳步、不省略上下文、不用只有安全圈才懂的黑话而不解释。
- 但"能复现"≠啰嗦:背景交代一两句够用,禁止八股标签和填充语(见下方「简洁硬规」)。
- PoC 给可直接复制粘贴的完整 Burp 原始 HTTP 请求块(不放 curl),配真实截图,照做就能看到同样结果。
- 逻辑连贯顺滑,像一条能走通的路,不是散落的证据堆。
② 技术不空洞 —— 该有的技术深度一分不能少:
- 讲清根因:为什么会有这个漏洞(鉴权缺失在哪一层/逻辑缺陷在哪/信任边界哪里破了)。
- 讲清原理:接口如何工作、参数如何被利用、鉴权差异如何证明、payload 为何生效。
- 给出关键技术证据:真实请求/响应字段、路由映射、代码片段、鉴权头对照、规模化数据统计。
- 结论有据可查,不是"我觉得有问题",而是"因为 X 技术事实所以是 Y 漏洞"。
判断标准:一个产品经理照着能复现,一个安全工程师看了觉得技术扎实、无懈可击。两个都过才算合格。
DOCX 版式规格(格式基准,不得自由发挥)
生成方式:python-docx。从同目录 template.docx 复制起步(已含全部样式),逐节 append。不要手写 HTML 再转换。
样式(模板已内置,直接用样式名):
- 正文
Normal(微软雅黑 11pt);章节标题Heading 2(13pt 加粗);Step 标题Heading 3;bullet 用List Bullet。 - 全文统一黑色:模板已去除 Word 默认主题蓝(Heading/Title/边框全部 000000),标题与正文颜色一致。生成时不得再给任何文字/边框手动设置彩色。
- 不用表格堆排版、不用卡片/配色——审核接受的是朴素的线性文档。
章节骨架(Heading 2 按此顺序,可选节用〔〕标注):
| 章节(Heading 2) | 内容要求 |
|---|---|
| 漏洞名称 | 一句话:资产 存在 漏洞类型 + 终局危害 漏洞 |
| 漏洞等级 | 严重/高危/中危 + 一句定级依据(标题就叫"漏洞等级",不加"自评"等后缀) |
| 漏洞类型 | 类型全称 + CWE(如有) |
| 漏洞影响资产 | 主资产域名/范围 + API 路径 + 关联资产 |
| 漏洞URL | 纯 URL 列表,一行一个,不写注解("它是干什么的、参数怎么被利用"归漏洞描述讲) |
| 漏洞描述 | 功能如何工作 → 根因 → 攻击者能干什么(编号列点)→ 关键验证结论(规模数字/IP/已确认事实) |
| 〔测试账号与会话上下文〕 | 测试角色、account_id、复验用 Cookie/token(注明"过期重登替换即可") |
| 漏洞复现步骤(POC) | 见下方 Step 规格 |
| 漏洞危害 | 危害枚举(编号,每条带已验证事实)+ 影响数据明文样本(便于审核直接验证,不打码)+ 边界声明(未做的越权动作)。就这一节,不另开"影响数据示例" |
| 修复建议 | 具体可执行(编号,含网段/参数级细节;根因已在漏洞描述讲清,不另开"根因分析"节) |
报告正文到「修复建议」为止。「复验清单」「建议评级说明」「实际攻击场景」「根因分析」「漏洞关键点」「影响数据示例」一律不单开节——复验走上方分层验证门(内部动作);定级理由只保留「漏洞等级」里的一句;攻击链时序和根因并进漏洞描述;数据样本并进漏洞危害。
0day / 通用产品漏洞:走通用型漏洞报告模板
成稿前先过上方「0day 收录审查门」(A 版本公开性 / B 类型前提 / C 案例证据 / D 投递纪律,任一否决项命中不成稿)。审查门没过 = 不按 0day 交付,回挖掘或换平台通道。
0day、通用产品漏洞不用上面的 SRC 章节骨架,一律按通用型漏洞报告模板成稿。章节顺序:
漏洞报告标题 → 漏洞发现时间 → 漏洞技术类型 → 漏洞描述(两段式:第一段产品介绍、第二段成因+危害)→ 漏洞危害 → 漏洞厂商全称 → 已知受影响产品及版本(附资产-产品强相关证明截图)→ 互联网资产证明(精准测绘语法 / 独立 IP 数量文字描述 / 测绘平台截图)→ 1、漏洞技术细节(完整 PoC:Burp 请求块+每步真实截图;触发条件)→ 2、复现证明(黑盒:3 个详细案例 + 10 个以上其他受影响目标)→ 3、修复方案(厂商修复 + 运维临时方案)→ 4、备注(边界声明)。
- 案例 IP 必须提交时现场验证存活,宁换不凑(云上动态实例隔天就会掉线,演示目标死掉会导致审核复现失败)。
- 测绘数据用测绘平台 API 取当日口径(独立 IP 数/国家分布/端口分布),测绘平台截图贴结果页。
- PoC 请求块用等宽字体段落;每步真实截图、不打码、不放 curl 等既有硬规全部沿用不变。
Step 规格(POC 章节内,每步严格这个结构):
[Heading 3] Step N:一句话标题
[Normal] 一两句话交代这步做什么、在哪个 URL 操作(必要背景并入此处,不写"为什么:"标签)
[Normal] PoC:
[Normal] POST /path HTTP/2 ← Burp 原始请求块整段贴入(纯文本段落,不打码)
Host: ...
...
[Normal] 结果: 一句结论(证明了什么)。**不贴返回数据包原文**——响应内容以截图为准,文字只写结论
[Normal] 截图(说明这是什么的截图):
<内嵌图片> ← docx.add_picture,紧跟"截图"段
[Normal] 图:xx_说明.png ← 图注一句
简洁硬规(违反即返工):
- 禁止"为什么:"/"操作:"这类八股标签,Step 用一两句自然语言交代动作即可;背景知识确有必要才写,能省就省。
- 同一事实全文只出现一次:IP 清单、测绘数字、版本号、实证结论,写在哪一章就只在哪一章;其它章节需要时用"见漏洞描述"式指代,不整段复读。
- 相邻章节不得内容重叠:漏洞描述讲清链路和结论后,后续章节需要时用"见漏洞描述"式指代,不整段复读;漏洞危害每条一行事实,不展开复述攻击过程。
- 一句话能说完的不写三句:删掉"值得注意的是""也就是说""换句话说"类填充语,删掉对截图内容的文字复述(截图就在下面)。
去AI腔硬规(违反即返工): 报告要读起来像安全工程师手写的,不像模型生成的。
- 内部方法论黑话不进报告:证伪/否定实验/同根因/命门/链路终局等过程词一个都不出现。这些结论用自然语言陈述事实("同框架其余接口鉴权正常,排除是公开查询功能"),不点名方法论。
- 禁止破折号拖尾解释:结果一句话写完,不用"——证明了……/——即……/——说明……"收尾;结论确有必要时独立成短句。
- 禁止形容词渲染:删掉"极具迷惑性""防骗难度极大""恶性竞争""天然构成"类修饰,只摆事实,严重性由审核者自己判断。
- 禁止截图元描述:不写"下图为浏览器内实时请求后将响应转表格展示"这类关于截图本身的说明;截图处只有"截图(内容):" + 图片 + 一句图注。
- bullet 不强行"主题词:"排比:一事一句自然陈述,类别前缀只在确有助分类时用。
- 不单独开节游说评级:「建议评级说明」不进报告(重申);定级依据只在「漏洞等级」留一句,升级理由融进漏洞危害的事实里。
成稿流程(按序执行)
第 0 步:查重(写之前必做,命中重复就停)
写任何新报告前,先 Glob/Read 目标单位的报告目录,按四项查重:
资产(同域名/IP) 根因(同一鉴权缺失/同一逻辑缺陷) 接口/功能点 影响面
- 四项高度重合 → 不新写。要么作为原报告的补强(见第 5 步),要么换资产/换漏洞类型。
- 只重合资产但根因/影响不同 → 可新写,但报告里说明与已有报告的区别。
第 1 步:过分层验证门(判据见本文「分层验证门」节)
逐条打勾,硬门缺一不写:
[ ] 硬门0 证伪:假设"这是正常功能"并跑了否定实验,证伪不掉
[ ] 硬门1 PoC 可复现:能直接粘贴 Burp 请求块,不需额外解释
[ ] 硬门2 危害是链路终局:资金/数据/接管/RCE/横向,不是中间信号
[ ] 硬门3 服务端/权限边界确认:不是浏览器 JS 假象/调试/渲染
[ ] 硬门4 命中类型命门(见上方按类型命门表对应行)
[ ] 硬门5 同根因接口穷举完、纵深追到边界,或记录"为什么到此为止"
[ ] 质量 否定实验:对存疑结论写出"如果这不是漏洞最可能的解释"并证伪
[ ] 质量 跨环境/跨账号/跨IP 至少一种复现
[ ] 质量 WAF:有防护记录绕过;无防护说明确认方式
[ ] 截图 每一步都有真实截图(浏览器打开原始 URL / Burp Repeater 实际响应),无一处自造渲染
[ ] 双读 小白照着能复现(操作→PoC→结果)且技术不空洞(根因+原理+关键证据)
硬门全过 → 写。质量项缺 → 不卡报告,但报告里说明。
第 2 步:生成 DOCX
复制 template.docx → python-docx 按「DOCX 版式规格」逐节填充。要求:
- 每个 Step 的截图用
doc.add_picture(png路径, width=Inches(6))内嵌,紧跟"截图(...):"段落。 - PoC 请求块保持等宽可读:整块作为独立 Normal 段落(可用单个段落内换行),不打码。
- 数字、IP、marker、时间等所有事实必须与截图/原始日志逐字一致——写完回读截图核对一遍。凭记忆写数字极易出错(真实教训:一份报告里 DNSLog 数字凭记忆写了四处,全错,复核时才抓出来)。
截图铁律(最高优先级,绝不违反)
报告每一步都必须配真实截图,绝不允许自己 PS/仿造/手绘渲染效果。
- 截图来源只能是:浏览器打开目标原始 URL/响应后截图(可用浏览器自动化工具的截图能力)、Burp Repeater 实际请求/响应截图。
- 凡绕过限制后能在浏览器直接打开渲染的图片/视频/页面/文件/JSON 响应 → 必须用浏览器打开原始 URL 截图放进报告。
- 每个 Step 的关键结果都要有对应截图,让审核者能看到"我确实在真实目标上看到了这个"。
- 唯一例外:目标内容客观无法在浏览器渲染时,才允许离线渲染/转存,并在报告里明确写出为什么无法用浏览器直接截图。
- PoC 数据包以文本完整保留即可,审核方会另行核对,不强制截图(但有 Burp 截图更好)。
截图 PNG 与 DOCX 同目录留存备查(如 reports/<单位>src/shots/),DOCX 内图片为内嵌副本。任务收尾时截图随报告保留,不删。
截图能力检测与降级(开工前先判定,三级阶梯)
AI 不是天生会截图——截图能力来自浏览器自动化工具(MCP)。成稿流程开始时先检测当前环境,按三级阶梯走:
- 自动检测:检查当前可用工具列表,凡是能"打开 URL + 截图"的都算——Playwright MCP、chrome-devtools MCP、Puppeteer MCP、js-reverse 等浏览器类 MCP 提供的 navigate/screenshot 工具。检测到就直接用,每个 Step 由 AI 打开原始 URL 自动截图,无需询问用户。
- 没有工具 → 给建议:明确告诉用户"检测到当前环境没有浏览器工具,无法自动截图",并给出推荐安装命令(如
claude mcp add playwright -- npx @playwright/mcp@latest)。用户愿意装 → 装完回到第 1 级全自动。 - 用户不装 → 人工供图:每到一个需要截图的 Step,明确告诉用户"请把这一步的 Burp/浏览器截图保存为
shots/step<N>_<说明>.png",用户放好后嵌入对应位置。禁止因为没工具就静默跳过截图、用"此处应有截图"占位、或用文字描述代替。
用户也不提供截图 → 报告不满足截图铁律,明确告知"缺真实截图的报告大概率被平台驳回",由用户决定是否继续,不偷偷降级成无图报告。
提交前自检(交稿前必过)
- 截图裁掉/遮盖:任务栏、本机用户名(含路径里的用户名)、其他浏览器标签页标题、书签栏、浏览器登录头像
- Burp 请求块:不含与漏洞无关的个人标识(自己的 cookie/token/测试账号之外的隐私信息)
- PoC/正文:本地路径打码;IOC 按目标平台风控规则脱敏(有平台会因正文含特定 IOC 关键词整单拒收,被拦时二分定位脱敏)
- DOCX 元数据:作者/公司字段清空(生成后检查 docProps/core.xml)
- 报告内不留测试基础设施细节(代理、接码、邮箱服务商等)
去 AI 腔检查(交稿前必过)
平台审核开始用 AI 检测+人工直觉筛报告,模板化 AI 腔会被降权/忽略。逐条过:
- 句式人化:消灭"首先/其次/综上所述/值得注意的是"类连接词;长短句混排,允许口语化短句("这里直接就断了""这步没拦")
- 结构去模板:不机械分"漏洞描述/漏洞危害/复现步骤"八股标题堆砌;按这个洞的叙事顺序走(怎么发现的→怎么验证的→打到什么)
- 删掉正确的废话:危害段不写"攻击者可能利用该漏洞造成严重影响"类空话,只写实际打出来的东西
- 保留人味细节:复现里带上真实判断痕迹("一开始以为是 X,测了 Y 排除"),这种否定实验过程 AI 腔写不出来,也是审核信任点
- 术语不翻译腔:直接用 Burp/越权/getshell 等行话,不写"未经授权的访问漏洞(IDOR)"类教科书腔
- 列表节制:满屏 bullet 是 AI 指纹;能一段话说清的不拆列表
第 3 步:语义化命名
文件名格式:资产 存在 漏洞类型 漏洞.docx
api.example.com 存在订单接口越权读取他人敏感信息漏洞.docx
console.example.com 存在文件上传绕过致存储型XSS漏洞_详细复现_2026-08-01.docx
阶段总结类可用:单位SRC测试工作存在阶段总结报告.docx
第 4 步:放对目录
报告统一放 reports/ 下按单位/类型分目录:
| 目标 | 目录 |
|---|---|
| 企业 SRC | reports/<单位>src/ |
| EDU | reports/edu报告/(根目录,不放子目录) |
| 0day / 通用产品 | reports/0day/(走通用型模板;报告内需含测绘语法、独立 IP 数、统计来源和时间) |
| 其他新单位 | 在 reports/ 下新建 <单位>src/ |
只有确认漏洞的最终 DOCX 进这里。JS/抓取归档/临时产物一律不进,任务结束即删。
第 5 步:更新 vs 驳回(两种截然不同的处理)
- 正常补强 / 扩大危害(未被驳回)→ 融合改写:把新证据整合进对应章节(描述/Step/危害/评级),必要时重排 Step、替换旧证据为更强证据,重新生成一版干净 DOCX。不要在底部堆"补充/追加/扩大说明"。
- 被审核驳回 / 需申诉(明确被打回)→ 底部追加:保留原报告上下文,在 DOCX 底部追加"驳回后补充说明/复核证据/申诉证据"(Heading 2 + 同样 Step 规格),不覆盖不另起;关键 PoC 发送到 Burp Repeater 便于复核。
第 6 步:收尾
- 只保留 DOCX(+ shots/ 截图源文件),删除对应临时目录/中间产物(Markdown 稿、转换中间文件也删)。
- 确认漏洞后写复盘记录(什么信号命中的、哪步卡过、下次怎么更快)。
硬约束速查
- 每一步配真实截图,绝不自己 PS/仿造渲染;来源只能是浏览器打开原始 URL / Burp Repeater 实际响应。PoC 数据包保留文本即可。
- 报告内证据不打码(提交稿要能被平台验证);普通聊天里可摘要。
- 只写能证明非公开、他人数据、真实业务影响的证据;公开内容/默认样例/自己测试账号数据 ≠ 危害,不写进危害。
- 单纯密钥/token 泄露不单独成报,只作高危链证据。
- CORS/安全头/版本号/Cookie 标志位/Self-XSS 不成报。
- 报告最终产物只有 DOCX,不留 HTML/Markdown。
