身份认证绕过与越权访问漏洞深度利用
身份认证绕过与越权访问漏洞深度利用
在渗透测试的业务逻辑漏洞范畴中,**身份认证绕过(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替换为POST、PUT、PATCH甚至DELETE,观察后端是否放行。
1.2 批量分配漏洞 (Mass Assignment)
现代 Web 框架(如 Spring Boot、Ruby on Rails、Laravel)经常使用对象绑定将 HTTP 请求参数直接映射到数据库模型。 如果开发者没有设置白名单,攻击者可以在更新资料的请求中,强行加入未展示的敏感字段:
通过这种方式,原本只是修改个人资料的请求,瞬间变成了垂直提权的致命一击。
2. JWT (JSON Web Token) 伪造与破解
JWT 是现代前后端分离应用中最常用的无状态认证机制。一个 JWT 由 Header、Payload 和 Signature 三部分组成。
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 的密钥。红队可以使用hashcat或jwt_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 保护:
- 黑客用自己的账号在第三方平台登录,获取一个合法的、绑定自己账号的
Code或State,但不完成最后一步绑定。 - 黑客将带有该
Code的回调 URL 发送给受害者。 - 受害者点击后,受害者的应用账号就与黑客的第三方账号绑定在了一起。黑客此后可通过“第三方登录”直接登入受害者的账号。
4. 总结
身份认证绕过与越权漏洞,是渗透测试中最考验安全人员“业务敏感度”的领域。它不依赖底层的 0day,而是建立在对开发人员思维盲区的精准打击上。从 JWT 签名算法的滥用到 OAuth 协议时序的劫持,红队的每一次成功越权,都是对“零信任”架构中最脆弱一环的无情撕裂。