Portswigger Labs — OAuth authentication
字数 1476 2025-08-18 11:36:53
OAuth 认证漏洞利用教学文档
1. OAuth 认证基础
OAuth 是一种开放授权标准,允许用户在不共享密码的情况下授权第三方应用访问其资源。本教学将详细讲解三种 OAuth 认证漏洞的利用方法。
2. 通过 OAuth 隐式流绕过认证
漏洞描述
利用 OAuth 隐式授权流程中的缺陷,通过修改认证请求中的参数来冒充其他用户。
实验目标
登录 Carlos 的账户 (carlos@carlos-montoya.net)
利用步骤:
- 使用已知凭证登录 (winner/peter)
- 在 Burp Suite 中检查历史流量
- 定位到
/authenticate路径的 POST 请求 - 修改请求中的
email参数为carlos@carlos-montoya.net - 右键请求选择 "Request in browser in original session"
- 成功以 Carlos 身份登录
3. 强制 OAuth 资料链接 (CSRF 攻击)
漏洞描述
利用 CSRF 漏洞将攻击者的社交媒体资料绑定到管理员账户。
实验目标
将攻击者的社交媒体资料绑定到管理员账户,然后访问管理面板删除 Carlos。
利用步骤:
- 使用传统用户名/密码登录 (winner/peter)
- 点击 "attach a social profile"
- 分析流量,定位
/oauth-linking请求 - 再次点击 "attach a social profile" 并拦截请求
- 找到
/oauth-linking请求后复制 URL - 在漏洞利用服务器上创建 iframe,src 属性指向复制的 URL
- 发送漏洞利用给受害者
- 返回主页并附加社交媒体资料
- 现在社交媒体资料已绑定到管理员账户
- 访问管理面板删除 Carlos
4. 通过 redirect_uri 劫持 OAuth 账户
漏洞描述
通过控制 OAuth 流程中的 redirect_uri 参数窃取授权码。
实验目标
窃取与管理员用户关联的授权码,使用它访问其账户并删除 Carlos。
利用步骤:
- 使用凭证登录 (wiener/peter)
- 点击 "LOG OUT"
- 再次点击 "my account" 观察直接登录
- 在 Burp 中检查流量,找到
/auth?client_id=xxx&redirect_uri=xxx的 GET 请求 - 修改
redirect_uri参数指向漏洞利用服务器 - 确认服务器访问日志中收到请求
- 构造攻击使管理员访问修改后的链接
- 从访问日志中获取管理员授权码
- 使用授权码登录管理员账户
- 访问管理面板删除 Carlos
5. 关键安全要点
- 隐式流漏洞:确保服务器端验证所有认证参数,特别是用户标识信息
- CSRF 防护:OAuth 链接操作应使用 CSRF 令牌保护
- redirect_uri 验证:严格验证 redirect_uri 参数,仅允许预注册的 URI
- 授权码保护:授权码应有短暂有效期且只能使用一次
- 服务器端验证:所有关键操作应在服务器端进行验证
6. 防御措施
- 实现完整的 PKCE (Proof Key for Code Exchange) 流程
- 使用 state 参数防止 CSRF 攻击
- 严格限制 redirect_uri 的白名单
- 对敏感操作实施二次认证
- 记录和监控异常的 OAuth 授权请求
通过理解和利用这些 OAuth 漏洞,安全研究人员可以更好地评估和加强 OAuth 实现的安全性。