tryhackme OAuth 漏洞

https://tryhackme.com/room/oauthvulnerabilities
writeup:https://www.cnblogs.com/Hekeats-L/p/18913859

关键概念

资源所有者
客户端
授权服务器
资源服务器
授权
访问令牌
刷新令牌
重定向 URI
范围
状态参数
令牌和授权端点

OAuth 授权类型

授权码授予
图片

隐性授权
image
图片

资源所有者密码凭证授权
图片

客户端凭证授权
图片

OAuth 流程的工作原理

图片

  • 授权请求

response_type=code :这表示 CoffeeShopApp 需要返回授权码。
state :CSRF 令牌,用于确保请求和响应属于同一交易。
client_id :客户端应用程序的公共标识符,唯一标识 CoffeeShopApp 。
redirect_uri :授权服务器在 Tom 授予权限后会将他重定向到的 URL。此 URL 必须与客户端应用程序预先注册的重定向 URI 之一匹配。
scope :指定请求的访问级别,例如查看咖啡订单。

  • 身份验证与授权

用户登录
同意提示

  • 授权响应

code : CoffeeShopApp 将使用授权码请求访问令牌。
state : CoffeeShopApp 先前发送的用于验证响应的 CSRF 令牌

  • 令牌请求

grant_type :正在使用的授权类型;通常,它被设置为 code ,以指定授权码作为授权类型。
code :从授权服务器收到的授权码。
redirect_uri :此值必须与授权请求中提供的原始重定向 URI 匹配。
client_id and client_secret :用于验证客户端应用程序的凭据。

  • 令牌响应

access_token :用于访问 Tom 详细信息的令牌。
token_type :通常为“Bearer”。
expires_in :访问令牌的有效持续时间(以秒为单位)。
refresh_token (optional) :用于获取新的访问令牌而无需用户再次登录的令牌。

识别OAuth服务

各种技术栈关键字,错误信息等

利用OAuth - 窃取OAuth令牌

攻击者控制 redirect_uri 中列出的任何域名或 URI,他们可以操纵流量以拦截令牌

利用OAuth - OAuth中的CSRF

弱state参数或缺失state参数的漏洞

http://bistro.thm:8080/csrf/callbackcsrf.php?code=xxxx 中的code=XXXX为攻击者自己的授权码

利用OAuth - 隐式授权流程

令牌会通过浏览器直接返回给客户端,而不需要中间的授权码,此流程主要被用于单页应用程序中

在URL中公开访问令牌:应用程序将用户重定向到OAuth授权端点,该端点会在URL片段中返回访问令牌。在相关的页面上运行的任何脚本都可以轻松地访问这个URL片段。
重定向URI验证不充分:OAuth服务器没有充分验证重定向URI,从而允许潜在的攻击者操纵重定向端点。
无HTTPS实现:应用程序不强制执行HTTPS,这可能导致通过中间人攻击拦截令牌。
访问令牌处理不当:应用程序不安全地存储访问令牌,可能存储在localStorage或sessionStorage中,这使其容易受到XSS攻击的影响。

OAuth 2.0 安全最佳实践建议弃用隐式授权流程

XSS偷URL中#后面的令牌

其他相关漏洞和OAuth 2.1的演进

令牌有效期限制不足(实现短期有效的访问令牌和刷新令牌(refresh token)机制)

重放攻击(nonce值和timestamp 时间戳检查)

令牌的不安全存储(如安全Cookie或被加密的数据库)

OAuth 2.1的演进建立在OAuth 2.0的基础上,旨在弥补其不足并增强安全性,参考:https://oauth.net/2.1/

posted @ 2026-08-10 00:53  sec875  阅读(2)  评论(0)    收藏  举报