2. 常见绕过模式与攻击面

隐式权限绕过并非单一漏洞,而是一类授权逻辑与资源访问控制分离引发的安全缺陷。攻击者通过篡改API参数、遍历资源路径、滥用元数据、伪造JWT、调用未授权接口等手段,绕过服务端的权限校验。本章建立“现象识别 → 数据采集 → 原因定位 → 修复动作 → 复测 → 预防”排查闭环,覆盖五种核心攻击面。

隐式权限绕过五大攻击面总览 隐式权限绕过 API参数篡改 路径遍历 元数据滥用 JWT伪造 未授权接口 目标系统 攻击者通过篡改参数/路径/元数据/JWT 最终获取未授权数据/提权/横向移动

2.1 API参数篡改

现象数据采集要点原因定位
修改请求参数(user_id、role、is_admin)后返回其他用户或管理数据
  • Burp Suite / Fiddler 抓取所有API请求
  • 记录参数类型(整型、字符串、布尔、JSON对象)
  • 收集被篡改前后的响应状态码、响应体差异
服务端未将当前会话身份与资源所有者比对;仅依赖客户端提交的user_id

排查步骤

  1. 参数类型枚举:列出所有id、userId、owner、admin、role参数
  2. 参数值替换:将自身user_id替换为其他用户/管理员ID
  3. 响应对比:若返回他人数据或管理功能,确认存在隐式权限绕过
  4. 批量测试:对每个POST/PUT/DELETE接口重复步骤2-3
修复动作:在服务端实现基于会话的所有者校验——修改资源时从Session/提取当前用户ID,而非接受客户端传入的user_id。
复测:使用工具(如Burp Intruder)批量发包,验证所有userId参数替换均返回403/401。

2.2 路径遍历

攻击者通过../、..%2f、%2e%2e%2f等编码绕过路径限制,访问越权资源。

故障树判断规则

路径输入 → 是否包含 ../ 或 ..%2f → 是 → 路径遍历风险
路径输入 → 是否包含 %2e%2e%2f → 是 → 路径遍历风险
路径输入 → 是否包含 // → 是 → 路径规范化风险
路径输入 → 最终路径是否在允许白名单内 → 否 → 授权阻断
现象数据采集原因定位
访问 /api/files/../../etc/passwd 返回系统文件 记录请求URL、路径参数、响应的文件内容头 未对路径进行规范化(realpath)并做白名单匹配

修复动作

  1. 路径规范化:使用 os.path.realpath 或等价函数解析最终物理路径
  2. 白名单校验:将最终路径与允许的基础目录前缀比较
  3. 编码过滤:拒绝所有包含 %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接受公钥 → 公钥已知可伪造

修复动作

  1. 服务端 强制校验签名,拒绝 alg=none
  2. 使用 长度 ≥ 256bit 的随机密钥;避免硬编码弱口令
  3. 设置 KID(Key ID)白名单,防止注入任意密钥
  4. 使用 JWT 库的严格模式,不自动降级算法
复测:发送 alg=none 的 ,期望状态码 401;发送 payload 篡改后的 ,期望 403。

2.5 未授权接口

后端暴露了 内部/调试/旧版本 API,且未通过统一鉴权中间件过滤。

排查表

特征示例排查方法
/internal/* 、/admin/* 、/debug/*/internal/v1/user/list目录扫描 + 路径字典
旧版本/测试端点/api/v0/deleteAllGit历史审查、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检测