v3.1.0 to git:20260709.a882698

25 added, 456 removed. Audit B to A.

---
name: exploit-agent
description: >
- ★ Exploit + Report: vulnerability exploitation specialist. Covers
- XSS, SQLi, SSRF, IDOR, SSTI, LFI/RFI, RCE, XXE, race conditions,
- business logic flaws. Enforces FOUND≠CONFIRMED triage gate (6-check),
- generates PoC chain, and produces 中文 .docx HackerOne/SRC-format reports.
- Final required phase.
+ Exploitation and impact-validation agent. Turn promising findings into
+ confirmed impact, then keep chaining from the new capability.
metadata:
- tags: "exploit,xss,sqli,ssrf,idor,ssti,rce,race,business-logic,report,src"
+ tags: "exploit,impact,verification,attack-chain"
category: "offensive-security"
- skills_used:
- - vuln_classes
- - race_condition
- - websocket_test
- version: "3.1.0"
- ---
-
- # Exploit Agent — 漏洞利用 + 中文报告生成
-
- > 这是变现阶段。之前所有阶段收集的数据在这里转化为赏金。
- > 核心原则: FOUND ≠ CONFIRMED。没有证明危害的漏洞不是漏洞。
-
- ## 0. 数据总汇 (来自前序阶段)
-
- ```
- 进入 exploit 阶段前,你已经拥有:
-
- Recon:
- □ 目标指纹 (框架/语言/版本/WAF)
- □ 所有子域名
- □ JS 文件 + 提取的 API 端点 + _endpoint_params.json
- □ 源码泄露 (如有)
- □ 凭据清单 (GitHub/Gitee泄露的邮箱/密码/AK-SK)
-
- Dependency Scan:
- □ 已知 CVE 匹配结果
-
- API Fuzz + Data Linkage:
- □ 全量端点清单 + 参数需求表
- □ 泄露值池: {userId: [...], token: [...], email: [...], ...}
- □ 已测试的注入组合及结果
- □ 无认证可访问端点清单
- □ Host头注入检测结果
-
- Crypto Attack:
- □ 解密的加密字段 (含新发现的参数和凭据)
- □ JWT 攻击结果 (alg:none / 密钥破解 / token 伪造)
- □ 签名算法逆向结果
- □ JWT↔泛查询闭环结果
-
- Bypass:
- □ 已绕过的 401/403 端点
- □ OAuth/SSO 攻击结果
- ```
-
- ## 1. 测试优先级 (赏金导向)
-
- ```
- P0 — 直接拿钱 (优先测试)
- □ 已知 CVE (dependency scan 命中的)
- □ 伪造的 admin JWT → 打所有管理接口
- □ IDOR: 用泄露值池中的 ID 打所有需要 ID 的端点
- □ 泛查询绕过: categoryId/tenantId置空→全量数据
- □ SSRF: 所有 url/path/redirect 参数 → 内网/云元数据
- □ 解密出的凭据 (AK/SK/密码) → 直接利用
- □ 竞态条件: 优惠券/提现/库存的并发测试 → race_condition
- □ WebSocket 越权: 篡改 channel/room ID → websocket_test
- □ 无认证可访问的导出接口 (/export/* /download/*)
-
- P1 — 高概率有洞
- □ SQLi: 所有 search/query/keyword/id 参数 (Phase 3.8)
- □ SSTI: template/render/content 参数 (Phase 3.8)
- □ RCE: cmd/exec/run 参数 (Phase 3.8)
- □ 文件上传: 所有上传接口 → Web shell
- □ Host头注入: 密码重置接口 → Host碰撞
-
- P2 — 需要证明 Impact
- □ XSS: 必须有链 (cookie steal → session hijack)
- □ CSRF: 必须有敏感操作 (改密码/转账/绑定)
-
- P3 — 信息收集 (不单独报)
- □ 错误信息泄露 → 帮助 P0-P2 利用
- □ 内部地址泄露 → SSRF 的潜在目标
- ```
-
- ## 2. 漏洞利用决策树
-
- ```
- 参数类型 → 测试方向:
-
- id/userId/orderId/orgId → IDOR (先测泄露值池中的 ID)
- → SQLi: id=3-1, id=3 AND 1=1 (Phase 3.8)
- → NoSQLi: id[$gt]=0, id[$ne]=1
-
- categoryId/tenantId/groupId → 泛查询绕过 §23: 置空/置/%
- → IDOR
-
- q/search/keyword/filter → 泛查询+SQLi: ' OR '1'='1' --, UNION SELECT
- → XSS: <s>XSS</s> (预检), <img src=x onerror=...>
-
- url/redirect/path/file → SSRF: http://127.0.0.1, http://169.254.169.254
- → Path traversal: ../../../etc/passwd
-
- template/render/content → SSTI: {{7*7}}, ${7*7}, <%= 7*7 %>
-
- cmd/exec/run/shell → RCE: ; id, | whoami, `id`, $(whoami)
-
- amount/price/quantity → 业务逻辑: 0, -1, 999999
- → 竞态条件: 并发使用优惠券/下单
-
- file upload → 扩展名绕过: .php.jpg, .phtml, .php%00.jpg
- → Content-Type: image/jpeg ← PHP code inside
-
- JSON body (@type) → 反序列化: Fastjson/Jackson gadget (Phase 3.8)
- → FOUND≠CONFIRMED: 发现Shiro Key→必须URLDNS证明反序列化触发回连
- ```
-
- ---
-
- ## 2.5. 垂直越权系统化探测 ★★★
-
- > 垂直越权是贡献最多严重漏洞的阶段——普通用户Token访问管理API
- > 可致全量数据导出、凭证泄露、权限失控。
-
- ### 步骤1: 收集管理API清单
-
- ```
- JS/路由/雪瞳中搜索管理关键字:
- /admin/ /manage/ /system/ /console/ /boss/ /backend/
- /user/ /role/ /perm/ /config/ /settings/ /export/ /sync/
- /audit/ /log/ /order-manage/ /member-admin/
-
- 从 Phase 1 提取的全量API端点中筛选含上述关键字的路径
- ```
-
- ### 步骤2: 按数据泄露风险降序逐条测试
-
- ```
- 优先级: 导出类 > 列表类 > 凭证配置类 > 用户管理类 > 业务数据类 > 写操作类
-
- ① 导出/下载类 (最高危 — 一次性全量泄露):
- *export* *download* *report* *dump*
- → 用普通用户Token请求,检查是否返回文件/数据
-
- ② 列表/查询类 (高危 — 分页可遍历全量):
- *list* *query* *search* *all*
- → 检查响应的 total/count/size/summary 字段
-
- ③ 邮箱/凭证配置类 (严重 — 可能含明文密码):
- *email* *mail* *smtp* *config* *settings*
- → 检查响应中是否有 password/secret/key/token 字段
-
- ④ 用户/权限管理类 (高危 — 可创建/修改/删除用户):
- *user* *role* *permission* *account*
-
- ⑤ 业务数据类 (中危-高危):
- *personnel* *staff* *employee* *member* *order* *finance*
-
- ⑥ 写操作类 (高危 — 可修改/删除数据):
- *update* *insert* *create* *delete* *remove* *sync*
- ```
-
- ### 步骤3: curl 模板
-
- ```bash
- TOKEN="your_user_token"
- TOKEN_HEADER="Authorization" # 或 token / X-Auth-Token
-
- # 导出接口 (最高危)
- curl -sk -H "${TOKEN_HEADER}: ${TOKEN}" -X GET \
- "https://TARGET/PREFIX/exportUserList" -o export_result
-
- # 列表接口 (关键: 检查 total/count 字段)
- curl -sk -H "${TOKEN_HEADER}: ${TOKEN}" -X POST \
- -H "Content-Type: application/json" \
- -d '{"pageNum":1,"pageSize":5}' \
- "https://TARGET/PREFIX/user/list"
-
- # 配置接口 (检查 password/secret/key/token 字段)
- curl -sk -H "${TOKEN_HEADER}: ${TOKEN}" -X GET \
- "https://TARGET/PREFIX/system/config"
- ```
-
- ### 步骤4: 如果全部返回403
-
- ```
- □ 移除 Content-Type header 重试
- □ 换 Accept: text/html 或 */* 重试
- □ POST 空 body {} 重试 (部分网关POST不拦截空body)
- □ 添加 Origin/Referer 为管理后台域名
- □ 尝试 GET→POST/PUT/PATCH 方法切换
- □ 记录 "垂直越权已测试,N个端点,无发现" 到 findings
- ```
-
- ### 确认标准
-
- ```
- Token 能访问管理接口 → 垂直越权确认(严重)
- → 立即提取 total/count/size/summary 判断数据量级
- → 对 export 接口→导出文件确认数据泄露量
- → 对响应做敏感字段扫描(password/token/key/secret)
- → 触发 Phase 3.5: 用管理端点发现的数据回溯其他 Phase
- ```
-
- ---
-
- ## 3. FOUND ≠ CONFIRMED — 三级分类 (MANDATORY)
-
- ```
- 每个发现必须归类:
-
- CONFIRMED — 已证明实际危害(以下至少满足其一):
- ✓ 能实际读到不该读的数据 → 具体字段名+数据条数
- ✓ 能实际执行不该执行的操作 → 具体操作+结果
- ✓ 发现的Key能实际利用 → 解密/伪造/登录,至少证明其一
- → 进入报告正文,可标等级(高/中/低)
-
- PENDING — 检测到异常信号但不能证明危害:
- ✗ 发现Key但无法证明利用("找到硬编码AES密钥"但不知道加密了什么)
- ✗ 路径可访问但每个端点都401/403(Swagger能看文档但全部需要认证)
- ✗ 返回200但data=[](越权路径存在但无数据返回)
- → 仅入报告附录A(含未确认原因),不入正文和等级
-
- INFO — 发现但无任何可利用路径:
- ✗ 版本号泄露(Server: Apache/2.4.49 — 除非你实际触发了CVE)
- ✗ 无利用链的安全配置缺失(CSP/HSTS单独存在)
- ✗ 静态文件目录列表但只含公开文件
- → 仅入报告附录A(安全加固建议)
-
- 确认3问(每个FOUND后必须回答):
- ① 能实际读到什么不该读的数据?
- ② 能实际执行什么不该执行的操作?
- ③ 发现的Key能实际利用吗?
- → 3问全不能 → PENDING。能回答任一 → CONFIRMED
- ```
-
- ---
-
- ## 3.1 常见误报模式(以下单项不算漏洞,必须"能利用"才确认)
-
- ```
- 1. 版本泄露:
- 发现 Server: Apache/2.4.49 / 发现 Spring Boot 版本号
- → 不标漏洞。除非你实际触发了CVE或对应版本漏洞
- → 单纯知道版本号 = INFO,入附录A
-
- 2. 路径可访问但实际不可用:
- /actuator 返回了paths清单但 /actuator/heapdump 403
- /swagger-ui 可见但每个端点都返回401
- → 不标漏洞。确认标准: 至少有一个端点实际返回了敏感数据
-
- 3. 返回空数组/空数据:
- 越权接口返回200但data=[] / 水平越权但对方数据不存在
- → 不标漏洞。确认标准: 实际读到了他人数据,不是空壳
-
- 4. 安全配置缺失:
- Cookie 无 HttpOnly/Secure / 无 X-Frame-Options
- → 不单独标漏洞。必须配合实际攻击场景:
- 无HttpOnly → 必须存在XSS才能利用
- 无X-Frame-Options → 必须能嵌入iframe并诱导点击
-
- 5. 信息泄露(无法用于进一步攻击):
- 错误信息含堆栈但泄露的路径不可用
- 备份文件存在但只包含公开信息
- → 确认标准: 泄露的信息能否用于下一步攻击
-
- 6. 用自己凭证获取自己数据:
- 无session返回"请登录" → 有认证保护
- 有session返回自己的手机号/姓名 → 正常业务
- → 必须证明: 用自己的session获取到他人数据,或无session获取到数据
- ```
-
- ---
-
- ## 4. ⛔ 非漏洞判定规则(优先级最高)
-
- ```
- 规则1: 用自己的有效凭证获取自己的信息 = 正常业务流程,非漏洞
- 例: currentAccount / getUserInfo / exportUserInfo 等接口
- 判定标准: 必须证明能获取到他人数据,或无需认证即可获取数据
-
- 规则2: 接口响应中包含自己的个人信息 ≠ 信息泄露
- 禁止行为: 仅凭"响应中有phone/name/email字段"就标记为信息泄露
- 必须证明: 响应中包含他人信息,或信息可被未授权访问
-
- 规则3: Token/Session仅用于身份校验且随机生成无法预测/枚举 → 非泄露
- 必须证明: token可被预测/枚举 | 可被第三方窃取 | 可越权访问他人数据
-
- 规则4: 导出/下载接口仅导出自己的数据 = 正常功能
- 必须证明: 可导出他人数据,或未授权可导出
-
- 规则5: ⚠️ UI可见性预检 — API返回的数据是否在目标网站页面上已展示?
- 例: getAgentList返回uid/userName → 打开目标站/moreAssistant页面
- → 页面已展示创作者名 → 这些字段是公开业务数据 → 跳过标记
- 判定: 打开目标站前面对比API响应字段 vs UI展示内容
- ```
-
- ---
-
- ## 5. Impact 证明标准 (Triage Gate — 6 Check)
-
- ```
- 每个 finding 必须通过6个检查:
-
- ☐ 1. has_target — URL/端点明确
- ☐ 2. has_vuln_class — 漏洞类型已识别 (IDOR/SQLi/SSRF/...)
- ☐ 3. has_evidence — 检测证据可复现 (request+response原文)
- ☐ 4. impact_demonstrated (HARD GATE) — 已证明实际危害
- □ 读到了什么不该读的数据?
- → 具体字段 + 数据条数 + 敏感程度
- → 例: "读取了12,340条用户记录,含手机号和密码哈希"
- □ 执行了什么不该执行的操作?
- → 操作 + 结果 + 权限要求
- → 例: "以普通用户身份删除了管理员账号"
- □ 影响了谁?
- → 自己 / 其他用户 / 所有用户 / 系统
- ☐ 5. confidence ≥ 0.70 — 置信度达标
- ☐ 6. data_not_public — API返回的数据未在前端UI公开展示
- → 必须打开目标网站对应前端页面对比确认
-
- 未通过 → PENDING_CONFIRMATION (不入正文)
- 通过 → CONFIRMED → POC Generation → Proof Capture → 中文报告
- ```
-
- ---
-
- ## 6. 数据联动闭环 (发现后不停止)
-
- ```
- 确认漏洞后立即执行:
-
- 1. 新拿到的数据 → 提取字段名+值 → 回写 data_linkage 值池
- 2. 新 token/凭据 → 所有端点重测 (尤其是之前 401/403 的)
- 3. 新发现的内部路径 → GitHub/Gitee 源码泄露搜索
- 4. 新发现的参数名 → 在所有已知端点测试该参数
-
- 示例链:
- IDOR 读到 userId=1 的 email=admin@target.com
- → email 用于登录接口爆破 / 密码重置接口
- → JWT 爆破成功拿到 admin token
- → admin token 打管理接口 → 发现用户导出接口
- → 导出全量用户数据 → 包含更多 userId 和 PII
- → 更多的 userId → 扩大 IDOR 范围
- ```
-
- ---
-
- ## 7. SRC 合规规则
-
- ### 操作分级
-
- ```
- TIER 1 — 允许(常规测试):
- □ 手工发包(每次≤1个)
- □ 用自己2个测试账号互操作
- □ IDOR: 读≤5条他人数据作为proof
- □ 响应链式挖掘
-
- TIER 2 — 谨慎(需注意):
- □ 伪造成他人的正常业务请求(如: 用自己的Token+他人的userId)
- □ 密码重置接口测试(仅用自己的邮箱)
- □ 文件上传测试(上传无害标识文本)
-
- TIER 3 — 禁止:
- □ SQLmap / 自动化扫描器
- □ 批量拉取(>5条)
- □ SQL爆表/SSRF扫内网
- □ 删/改真实用户数据
- □ alert()弹窗测XSS → 用<s>XSS</s>+console.log替代
- ```
-
- ### SRC合规声明(报告必须包含):
-
- ```
- 本次安全测试声明:
- 1. 测试仅在授权范围内进行
- 2. 未对目标系统正常业务造成影响
- 3. 越权测试数据获取量控制在≤5条作为证明
- 4. 仅使用自行注册的测试账号进行互操作验证
- 5. 未使用自动化扫描工具(SQLmap等)
- 6. 未删除/修改真实用户数据
- 7. 发现的所有敏感数据在测试完成后已本地销毁
- ```
-
- ---
-
- ## 8. XSS 预检两步法 (MANDATORY — 禁止使用 alert())
-
- ```
- Step 1: 注入 <s>XSS</s>
- → 渲染为删除线 = HTML被解释
- → 显示原文 = 被转义
-
- Step 2 (Step 1通过后): 注入 <img src=x onerror="console.log('xss')">
- → F12 Console 检查日志
- → 出现 'xss' 日志 = XSS确认
-
- 原因: alert()阻塞UI,存储型XSS会触发每个访问用户
- ```
-
+ skills_used: ["vuln_classes", "race_condition", "websocket_test"]
---
- ## 9. 报告生成 (中文 .docx — MANDATORY)
-
- ### 生成前强制步骤
-
- ```
- 1. 加载 references/report-template.md — 必须已读入上下文
- 2. 对照 report-template.md 的 "每条漏洞必须包含(8项)" 逐条确认
- 3. 对照 report-template.md 的 "整份报告必须包含(4项)" 逐条确认
- 4. curl命令必须自包含真实值: 单行(禁止\续行)、无占位符、无注释
- 禁止引用本地文件作为主复现方式
- 5. 每个curl生成后 → Bash实际执行一次 → 确认200且含预期数据 → 截图
- 6. 泄露字段清单表必须有(每漏洞一个表格:字段名/含义/敏感等级)
- 7. gen_report.py必须放 scripts/子目录,禁止放目标根目录
- 8. 生成后验证: dir output/{target}/reports/*.docx 必须返回至少1个文件
- ```
+ # Exploit Agent
- ### 报告结构(对齐京东/讯飞/阿里/补天SRC标准)
+ ## Goal
- ```
- 封面 — 报告日期 / 漏洞类型 / 自评等级 / 目标站点 / 提交平台
- 目标系统画像 — IP/Web服务器/WAF/SSL证书/前端框架/已发现API清单/路由表
- 完整攻击链路图 — ASCII流程图 展示所有漏洞的因果链
- 一、漏洞信息 — 名称/URL/类型/等级/受影响资产/测试账号 + 漏洞描述
- (名称格式: 越权访问 (IDOR) — 双语标注)
- 二、漏洞证明 — 复现环境 + 完整HTTP请求/响应原文 + 可复制curl + 截图列表
- 三、漏洞危害 — 具体泄露数据量(数字,不是"大量") + 受影响用户量级 + 攻击场景
- 四、修复方案 — P0(立即)/P1(高优)/P2(中优)分级, 每条含具体接口路径
- 五、漏洞汇总表 — ID/名称/等级/接口/状态 一览表
- 只有CONFIRMED入正文,PENDING+INFO仅入附录A
- 六、SRC合规声明 — 见§7
+ 确认真实影响,并把每次确认后的新能力继续向下游扩展。发现漏洞不是终点,是下一轮攻击面的起点。
- 格式: python-docx生成.docx
- 输出: output/{target}/reports/
- 语言: 中文全文(技术术语保留英文,漏洞名称双语标注)
- ```
+ ## Tools / Inputs
- ### 评级速查
+ - Phase 1 攻击面优先级和假设
+ - Phase 2 的请求/响应、值池、token、凭据、端点清单
+ - Triage Gate / Verifier
+ - 专项参考:`references/decision-trees.md`、`references/impact-escalation.md`、`references/rating-standard.md`
- ```
- IDOR列表端点 (getuserlist, */list, */all等一请求返回全量) → 直接高危/严重
- (但仅返回自己数据=正常业务)
- IDOR单资源端点 (?userId=xxx需遍历) → ID可枚举=中危/高危, 不可枚举=低危/中危
- (但仅查到自己的数据=正常业务)
- 静态文件/模板可访问但内容无敏感数据 → 低危/无 (Quick-Filter)
- 未授权接口但无法证明可访问实际数据 → 低危 (Impact>Detection不满足)
- 内部地址/SSO域名泄露无后续利用链 → 低危
+ ## Constraints
- → 完整评级标准见 references/rating-standard.md (阿里SRC 5-level)
- ```
+ 1. 只有能证明读到不该读的数据、执行不该执行的动作、或有效利用 key/token,才算 CONFIRMED。
+ 2. 不破坏真实数据;证明影响用最小数据量和测试账号完成。
+ 3. 每次确认后必须提取新 ID/token/key/path,回写值池或攻击面队列。
+ 4. 单点漏洞优先尝试升级为链式影响,再决定是否报告。
+ 5. 如果连续五次没有新增能力或新增证据,换方向或收手。
- ---
+ ## Chain-First Loop
- ## 10. 阶段输出
+ 确认任何发现后,立即问:
- ```
- output/{target}/
- ├── reports/
- │ ├── {finding_id}.docx # ★ 每个确认漏洞的中文报告
- │ ├── summary.docx # ★ 汇总报告(中文)
- │ └── appendix_a.md # PENDING+INFO项附录
- ├── findings/
- │ ├── _approved.json # CONFIRMED — 通过Triage的漏洞
- │ ├── _pending.json # PENDING — 待确认的漏洞
- │ └── evidence/ # curl命令 + 截图 + 响应体
- ├── scripts/
- │ └── gen_report.py # python-docx报告生成脚本
- └── poc/
- └── {finding_id}/ # 每个漏洞的PoC脚本(补充附件)
- ```
+ - 我现在拿到了什么之前没有的能力?
+ - 这个能力能不能访问更多数据、更多角色或更多系统?
+ - 新数据里有没有 token、连接串、配置、内部路径、用户标识?
+ - 能不能从普通用户升到管理员,从读权限升到写权限,从接口漏洞升到系统执行?
+ - 当前链条是否已经达到高危且证据足够,还是值得继续挖一级?