前言

OAuth是一种安全相关的协议,用于用户授权第三方的应用程序访问用户的web资源,并不需要透露自己的密码,我们常见的QQ/微信/github等登录都是这种方式来实现的。

OAuth的认证思路与流程

涉及三方:服务提供方、用户、客户端

思想是在客户端与服务提供方之间设置一个授权层。其提供令牌(token)并且有权限范围和有效期。

以上步骤同意授权是关键有了这个授权以后,客户端就可以获取令牌,进而凭令牌获取资源。

攻击方法

1.CSRF导致绑定劫持

2.redirect_uri绕过导致授权劫持

CSRF导致绑定劫持

攻击者抓取认证请求构造恶意url,并诱骗已经登录的网用户点击(比如通过邮件或者QQ等方式).认证成功后用户的帐号会同攻击者的帐号绑定到一起。

OAuth 2.0提供了state参数用于防御CSRF.认证服务器在接收到的state参数按原样返回给redirect_uri,客户端收到该参数并验证与之前生成的值是否一致.除此方法外也可使用传统的CSRF防御方案。

案例:[某众测项目-OAuth 2.0认证CSRF漏洞之授权劫持]()(后续补充,暂时不公开)

redirect_uri 绕过授权劫持

根据OAuth的认证流程,用户授权凭证会由服务器转发到redirect_uri对应的地址。

无验证

如果该过程中没有做校验,攻击者可以自由控制redirect_uri回调地址的值,进而伪造链接进行钓鱼攻击,攻击者可以使用获取到的凭证登录该用户。

绕过验证

  • http://auth.app.com = 认证服务器保存的回调地址
  • evil.com = 恶意域名
  • auth.app.com.evil.com
  • evil.com?auth.app.com
  • evil.com?@auth.app.com
  • auth.app.com@evil.com
  • auth.app.com@evil.com
  • evil.comauth.app.com
  • evil.com:auth.app.com
  • evil.com.auth.app.com
  • evil.com:@auth.app.com

主要思路就是让认证服务器觉得回调地址是正常的!!

跨域绕过

  • 利用可信域的url跳转从referer偷取token

如果网站存在一个任意url跳转漏洞,可利用该漏洞构造以下向量。

https://api.xffbk.cn/oauth2/authorize?client_id=xxxxx&redirect_uri=http://www.xffbk.com/redirect.php?url=http://xxx.com

认证服务器将凭证通过GET方法发送到redirect.php,这时redirect.php执行url跳转,访问http://xxx.com,攻击者在evil.com记录日志,并从请求头中的referer字段提取出该凭证,即可通过该凭证进行授权登录

  • 利用跨域请求从referer偷取token

如果我们绕不过redirect_uri判断的时候,可以利用跨域请求从referer中偷取token。

redirect_uri限制死了只能为app.com,然而网站有地方我们可以操作例如:http://app.com/article/1.htm中允许用户发表文章,并且插入图片之类的功能点,我们此时就可以通过在页面中嵌入一个外部图片链接,文件被访问时受害者会访问外部链接,这时攻击者即可从请求头的 referer拿到 token。

最后修改:2021 年 10 月 08 日 10 : 38 AM
如果觉得我的文章对你有用,请随意赞赏