$npx -y skills add zhaoxuya520/reverse-skill --skill api-securityUse for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication, authorization, rate-limit, and CI/CD testing.
| 1 | # API 安全测试 |
| 2 | |
| 3 | ## ACTION REQUIRED(读完后立刻执行) |
| 4 | |
| 5 | 1. `NOW`: 读取 `../field-journal/precedent-pentest.md` — 确认本 skill 的操作是已授权的常规操作 |
| 6 | 2. `NOW`: 确认当前任务是否命中本 skill 的适用范围 |
| 7 | 3. `NEXT`: 读取 `../tool-index.md`,校验工具可用性和实际路径 |
| 8 | 4. `NEXT`: 缺工具时调用 bootstrap,不要猜路径 |
| 9 | 5. `ACT`: 进入"工作流"第一步并执行,不要停在确认状态 |
| 10 | |
| 11 | > 覆盖 REST / GraphQL / WebSocket / SOAP 全协议 |
| 12 | > 10 阶段方法论,从发现到 CI/CD 集成 |
| 13 | |
| 14 | ## 适用场景 |
| 15 | |
| 16 | - REST API 安全测试(OpenAPI/Swagger 驱动或盲测) |
| 17 | - GraphQL 安全审计(内省、批查询、别名过载) |
| 18 | - WebSocket 安全测试 |
| 19 | - JWT / OAuth 2.0 认证测试 |
| 20 | - BOLA/IDOR/BFLA 授权漏洞检测 |
| 21 | - API 限速绕过与 DoS 测试 |
| 22 | |
| 23 | ## 10 阶段测试流程 |
| 24 | |
| 25 | ### Phase 1: API 发现与侦察 |
| 26 | |
| 27 | ```text |
| 28 | 主动发现: |
| 29 | □ Vespasian: 无头浏览器爬取 → 自动生成 OpenAPI 3.0 / GraphQL SDL 规范 |
| 30 | □ Entropy --discover: 从 robots.txt + JS 文件提取端点 |
| 31 | □ Kiterunner / ffuf: 爆破未文档化的端点路径 |
| 32 | □ 检查常见路径: /swagger.json, /openapi.json, /graphql, /api-docs |
| 33 | |
| 34 | GraphQL 内省(三级尝试): |
| 35 | 1. 标准内省查询 |
| 36 | 2. 精简查询(绕过 WAF 全量封禁) |
| 37 | 3. 仅查 __schema { types { name } }(最小探测) |
| 38 | ``` |
| 39 | |
| 40 | ### Phase 2: 认证测试 |
| 41 | |
| 42 | ```text |
| 43 | JWT 分析(jwt_tool / Burp): |
| 44 | □ alg:none 攻击: 修改头部为 "alg":"none",清空签名 |
| 45 | □ 密钥混淆: RS256 公钥 → HS256 对称密钥 |
| 46 | □ 弱 HMAC 密钥爆破: jwt_tool -C -d wordlist.txt |
| 47 | □ 过期/声明篡改: 修改 exp/iat/sub/role 声明 |
| 48 | □ kid 注入: ../../etc/passwd → HMAC 签名绕过 |
| 49 | |
| 50 | OAuth 2.0: |
| 51 | □ redirect_uri 操控 → 授权码泄漏 |
| 52 | □ CSRF via state 参数缺失 |
| 53 | □ Token 在 Referer 头泄漏 |
| 54 | □ PKCE 缺失检测 |
| 55 | |
| 56 | GraphQL 认证: |
| 57 | □ mutation 通过 GET 请求绕过认证(CSRF) |
| 58 | □ 批查询认证绕过 |
| 59 | ``` |
| 60 | |
| 61 | ### Phase 3: 授权测试(BOLA/IDOR/BFLA) |
| 62 | |
| 63 | ```text |
| 64 | BOLA(对象级授权绕过): |
| 65 | □ 遍历数字 ID: /user/1 → /user/2 → /user/3 |
| 66 | □ 遍历 UUID |
| 67 | □ 遍历用户名/邮箱 |
| 68 | □ Burp Autorize: 双会话重放对比 |
| 69 | |
| 70 | BFLA(功能级授权绕过): |
| 71 | □ 普通用户执行管理员 API |
| 72 | □ HTTP 方法切换: GET → PUT → PATCH → DELETE |
| 73 | □ API 版本降级: /v2/admin → /v1/admin |
| 74 | □ 批量操作注入: {"users": [1,2,3]} → {"users": [1,2,3,admin_id]} |
| 75 | |
| 76 | 工具: Burp Autorize, AuthMatrix, Entropy (malicious_insider persona) |
| 77 | ``` |
| 78 | |
| 79 | ### Phase 4: GraphQL 专项 |
| 80 | |
| 81 | ```text |
| 82 | 内省泄漏 → 信息暴露检测 |
| 83 | 别名过载 → 100+ 别名 DoS |
| 84 | 批查询 → 10+ 同时查询 DoS |
| 85 | 字段重复 → __typename × 500 |
| 86 | 指令过载 → 递归 @skip/@include |
| 87 | 循环查询 → 深度嵌套内省递归 |
| 88 | 字段建议 → 错误消息信息泄漏 |
| 89 | GraphiQL/Playground 暴露 → IDE 公开风险 |
| 90 | GET 突变 → CSRF 风险 |
| 91 | 追踪/调试模式 → 元数据泄漏 |
| 92 | |
| 93 | 工具: FireTail, Escape DAST, api.sh (Phases 1-3) |
| 94 | ``` |
| 95 | |
| 96 | ### Phase 5: REST 输入验证 |
| 97 | |
| 98 | ```text |
| 99 | □ HTTP 方法切换: GET→POST→PUT→DELETE→OPTIONS→PATCH |
| 100 | □ Content-Type 篡改: JSON→XML→multipart |
| 101 | □ NoSQL 注入: {"username": {"$gt": ""}} |
| 102 | □ SSRF via URL 参数: webhook URL/头像 URL/导入 URL |
| 103 | □ XXE in XML 端点 |
| 104 | □ 参数污染: /api?role=user&role=admin |
| 105 | □ 批量赋值: 向请求体添加 is_admin: true |
| 106 | ``` |
| 107 | |
| 108 | ### Phase 6: 业务逻辑与差分测试 |
| 109 | |
| 110 | ```text |
| 111 | □ Entropy compare: diff v1 vs v2 API → 状态码变化/字段删除/延迟回归 |
| 112 | □ 多角色工作流测试: admin/user/readonly 权限矩阵 |
| 113 | □ 优惠券/积分/价格操控 |
| 114 | □ 竞态条件: 并发请求测试 TOCTOU |
| 115 | ``` |
| 116 | |
| 117 | ### Phase 7: WebSocket 测试 |
| 118 | |
| 119 | ```text |
| 120 | □ 端点发现 |
| 121 | □ 消息注入(注入 payload、原型污染) |
| 122 | □ 超大消息处理 |
| 123 | □ 类型混淆 |
| 124 | □ 跨站点 WebSocket 劫持(CSWH) |
| 125 | ``` |
| 126 | |
| 127 | ### Phase 8: 限速与 DoS |
| 128 | |
| 129 | ```text |
| 130 | □ 限速绕过 via 头部: X-Forwarded-For, X-Real-IP |
| 131 | □ 路径变体: /api/ → /api → /Api/ → /API/ |
| 132 | □ Slowloris 低带宽耗尽 |
| 133 | □ GraphQL 批查询深度嵌套 DoS |
| 134 | □ IP 轮换测试(ProxyCat 代理池) |
| 135 | ``` |
| 136 | |
| 137 | ### Phase 9: 数据暴露 |
| 138 | |
| 139 | ```text |
| 140 | □ 响应过度暴露: 对比 API 返回 vs UI 展示 |
| 141 | □ 分页枚举: ?page=1&limit=10000 |
| 142 | □ 错误消息信息泄漏: 堆栈跟踪/内部路径/SQL 错误 |
| 143 | □ GraphQL 嵌套遍历访问越权数据 |
| 144 | □ OpenAPI 规范暴露敏感端点 |
| 145 | ``` |
| 146 | |
| 147 | ### Phase 10: CI/CD 集成 |
| 148 | |
| 149 | ```text |
| 150 | □ Entropy --ci --watch: spec 变更时自动重跑 |
| 151 | □ Escape DAST: 按严重度阈值自动阻断构建 |
| 152 | □ 发现持久化为回归测试 |
| 153 | □ StackHawk(开发者优先、ZAP 内核) |
| 154 | ``` |
| 155 | |
| 156 | ## 工具链 |
| 157 | |
| 158 | | 工具 | 用途 | 获取 | |
| 159 | |------|------|------| |
| 160 | | Vespasian | 流量 → OpenAPI/GraphQL 规范 | GitHub: praetorian-inc/vespasian | |
| 161 | | Entropy | LLM 生成攻击场景,5 personas | GitHub: arjinexe/entropy-chaos | |
| 162 | | Escape DAST | 业务逻辑安全测试 | escape.tech | |
| 163 | | api.sh | 8 阶段全协议攻击管道 | GitHub: Sharon-Needles/api | |
| 164 | | FireTail | GraphQL 12 专项测试 | firetail.ai | |
| 165 | | jwt_tool | JWT 全面测试 | GitHub: ticarpi/jwt_tool | |
| 166 | | Burp Autorize | 双会话授权对比 | Burp BApp Store | |
| 167 | |
| 168 | ## 参考 |
| 169 | |
| 170 | - `references/rest-graphql-testing.md` — REST + GraphQL 深度测试 |
| 171 | - `references/jwt-oauth-testing.md` — JWT + OAuth 安全测试 |
| 172 | |
| 173 | |
| 174 | ## 任务完成自检(声称完成前 MUST 通过) |
| 175 | |
| 176 | - [ ] 我是否执行了工作流中的每一步(而不是只阅读)? |
| 177 | - [ ] 我是否基于 `tool-index` 使用了真实工具路径? |
| 178 | - [ ] 我是否产出了可复现证据(命令/脚本/截图/报告)? |
| 179 | - [ ] 我是否完成并回写了 RULES 要求的 Checklist 项? |