2. 常见绕过模式与攻击面
隐式权限绕过并非单一漏洞,而是一类授权逻辑与资源访问控制分离引发的安全缺陷。攻击者通过篡改API参数、遍历资源路径、滥用元数据、伪造JWT、调用未授权接口等手段,绕过服务端的权限校验。本章建立“现象识别 → 数据采集 → 原因定位 → 修复动作 → 复测 → 预防”排查闭环,覆盖五种核心攻击面。
2.1 API参数篡改
| 现象 | 数据采集要点 | 原因定位 |
|---|---|---|
| 修改请求参数(user_id、role、is_admin)后返回其他用户或管理数据 |
|
服务端未将当前会话身份与资源所有者比对;仅依赖客户端提交的user_id |
排查步骤
- 参数类型枚举:列出所有id、userId、owner、admin、role参数
- 参数值替换:将自身user_id替换为其他用户/管理员ID
- 响应对比:若返回他人数据或管理功能,确认存在隐式权限绕过
- 批量测试:对每个POST/PUT/DELETE接口重复步骤2-3
修复动作:在服务端实现基于会话的所有者校验——修改资源时从Session/提取当前用户ID,而非接受客户端传入的user_id。
复测:使用工具(如Burp Intruder)批量发包,验证所有userId参数替换均返回403/401。
复测:使用工具(如Burp Intruder)批量发包,验证所有userId参数替换均返回403/401。
2.2 路径遍历
攻击者通过../、..%2f、%2e%2e%2f等编码绕过路径限制,访问越权资源。
故障树判断规则
路径输入 → 是否包含 ../ 或 ..%2f → 是 → 路径遍历风险
路径输入 → 是否包含 %2e%2e%2f → 是 → 路径遍历风险
路径输入 → 是否包含 // → 是 → 路径规范化风险
路径输入 → 最终路径是否在允许白名单内 → 否 → 授权阻断
| 现象 | 数据采集 | 原因定位 |
|---|---|---|
| 访问 /api/files/../../etc/passwd 返回系统文件 | 记录请求URL、路径参数、响应的文件内容头 | 未对路径进行规范化(realpath)并做白名单匹配 |
修复动作
- 路径规范化:使用 os.path.realpath 或等价函数解析最终物理路径
- 白名单校验:将最终路径与允许的基础目录前缀比较
- 编码过滤:拒绝所有包含 %2f、%5c、%00 的请求
复测方法:构造 10 种路径遍历 Payload 包含 ../ 、.././ 、%2e%2e%2f 、..%252f ,确认均返回 404 或 403。
2.3 元数据滥用
云服务或平台提供的元数据端点(例如 AWS 169.254.169.254、Kubernetes 服务端点)被攻击者利用,获取临时凭证、、配置信息。
| 现象 | 数据采集 | 原因定位 |
|---|---|---|
| SSRF 漏洞发往 169.254.169.254 返回 IAM 凭证 | 捕获 SSRF 出站请求的目标 IP、返回的 JSON/XML | 未禁止对链路本地地址的出站访问;未过滤元数据端点 |
排查清单
- [ ] 服务是否有 SSRF 输入点(URL参数、文件导入、Webhook)
- [ ] 是否允许访问 169.254.169.254、100.100.100.200、Kubernetes API Server
- [ ] 是否返回了 access_key_id、secret_access_key、 等敏感字段
修复动作
- 在出站代理 / 防火墙中 拒绝 169.254.0.0/16、100.100.0.0/16、172.16.0.0/12 等元数据段
- 使用 IMDSv2 并设置 PUT 响应跳数限制
- 对用户输入的 URL 进行 协议+主机白名单 校验
2.4 JWT伪造
| 现象 | 数据采集 | 原因定位 |
|---|---|---|
| 修改 JWT payload 中的 role/scope 后提权成功 | 解码后的 JWT 头、载荷、签名原始 Base64 | 服务端未验证签名算法(alg=none);使用弱密钥;公钥可被替换 |
判断规则
JWT alg=none → 直接绕过签名验证 → 权限提升
JWT alg=HS256 但密钥为 “secret” → 可破解签名 → 伪造任意
JWT alg=RS256 但服务端误用HS256接受公钥 → 公钥已知可伪造
修复动作
- 服务端 强制校验签名,拒绝 alg=none
- 使用 长度 ≥ 256bit 的随机密钥;避免硬编码弱口令
- 设置 KID(Key ID)白名单,防止注入任意密钥
- 使用 JWT 库的严格模式,不自动降级算法
复测:发送 alg=none 的 ,期望状态码 401;发送 payload 篡改后的 ,期望 403。
2.5 未授权接口
后端暴露了 内部/调试/旧版本 API,且未通过统一鉴权中间件过滤。
排查表
| 特征 | 示例 | 排查方法 |
|---|---|---|
| /internal/* 、/admin/* 、/debug/* | /internal/v1/user/list | 目录扫描 + 路径字典 |
| 旧版本/测试端点 | /api/v0/deleteAll | Git历史审查、Swagger泄露 |
| 无认证头也可访问 | GET /api/health 返回业务数据 | 手动删除Authorization测试 |
修复动作
- 所有接口必须经过 统一鉴权中间件(除公开端点外)
- 废弃/调试接口 立即下线 或添加 IP白名单 + Header校验
- 在网关层建立 API 路由白名单,未注册路径直接返回 404
预防策略:建立 API 资产清单 → 定期扫描 → 自动监控新端点 → 在CI/CD阶段检测未挂载鉴权的路由。
2.6 本章总结:排查闭环对照表
| 攻击面 | 现象识别 | 数据采集 | 原因定位 | 修复动作 | 复测 | 预防 |
|---|---|---|---|---|---|---|
| API参数篡改 | 参数替换后返回他人数据 | Burp记录请求/响应 | 服务端未校验所有者 | 服务端提取会话身份 | 批量参数替换测试 | 代码审计 + ORM owner检查 |
| 路径遍历 | ../可访问上级目录 | URL路径、响应文件头 | 未规范化+白名单 | realpath + 白名单 | 10种编码Payload验证 | 输入过滤 + 最小权限文件系统 |
| 元数据滥用 | SSRF返回云凭证 | 出站IP、响应JSON | 未禁止元数据地址 | 防火墙 + IMDSv2 | 模拟SSRF攻击元数据端点 | 网络隔离 + URL白名单 |
| JWT伪造 | 改payload后提权成功 | JWT三段Base64 | 签名算法弱/未校验 | 强制校验+强密钥 | alg=none + payload篡改 | 密钥轮换 + 库版本升级 |
| 未授权接口 | 调试端点无需 | 路由列表、认证头 | 缺少统一鉴权中间件 | 统一认证 + 下线旧API | 目录扫描+删除Auth测试 | API资产清单 + CI/CD检测 |