安全矩阵

 找回密码
 立即注册
搜索
查看: 901|回复: 0

OAuth2.0漏洞分析

[复制链接]

417

主题

417

帖子

2391

积分

金牌会员

Rank: 6Rank: 6

积分
2391
发表于 2023-12-10 10:58:45 | 显示全部楼层 |阅读模式
苏苏的五彩棒 迪哥讲事 2023-12-08 14:52 发表于江苏

0x01 OAuth授权框架
OAuth是一种常用的授权框架,它使网站和应用程序能够请求对另一个应用程序上的用户帐户进行有限访问。OAuth允许用户授予此访问权限,而无需将其登录凭据暴露给请求的应用程序。这意味着用户可以选择他们想要共享的数据,而不必将其帐户的账号密码交给第三方。

0x02 OAuth2.0是如何运行的?
可以看下阮一峰老师对于OAuth2.0基础知识的讲解,非常的详细这里就不多赘述了。
https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

0x03 OAuth 2.0:Bearer Token
Bearer Token用于 OAuth 2.0授权对资源的访问,任何 Bearer Token 的携带者都可以使用它随意访问相关资源。

一般都采用Authorization Header的方式,携带Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXX
  1. GET /resource HTTP/1.1
  2. Host: server.example.com
  3. Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXX
复制代码


0x04 Bearer Token生成接口未授权访问
漏洞简介:
一次对经过授权的小程序进行渗透测试,由于开发错误的将获取 Bearer Token的接口设置成了未授权访问,导致上万条超敏感信息泄露。

漏洞流程:



漏洞利用:
1、访问目标小程序接口,发现返回了spring security oauth2的报错信息。



2、我们将小程序进行解包,然后搜索:Bearer,看下能否找到硬编码的Bearer Token,定位到下图位置发现是个文件上传的功能,但是loadToken()方法会帮文件上传功能生成一个Bearer Token,这里我们就可以进一步利用loadToken()帮我们生成一个Bearer Token。(推测此处研发在写代码的时候⽂件上传为未授权接口,但oatth2此处强制校验相关认证字段,故系统需要写一个方法为上传功能⽣成⼀个Bearer Token)



3、我们定位到loadToken()方法,发现是post请求接口



4、我们尝试post请求访问该接口,成功返回Bearer Token



5、我们登陆到小程序首页,查看js可看到相关的路由


访问其中一个接口,然后使用burp拦截,修改数据包,添加Authorization: Bearer Bearer Token(上一步获取到的),放包后就来到了相应的路由界面,后续的流量包要直接丢掉,不然就会因为认证问题直接跳转到登陆页面




6、我们发现该页面是一个数据导出的页面,点击导出抓包,然后添加Authorization: Bearer Bearer Token(上一步获取到的),发送数据包,获取到了上千条超敏感数据



7、同理访问其它路由接口,本次测试一共获取到了上万条超敏感数据。

0x05 URL重定向漏洞
漏洞简介:
一些授权服务对于回调的URL做设置或者限制,导致攻击者可以利用这点做一些URL重定向攻击,一般有两种情况



1、对于URL无任何限制,可以为任意

2、对于URL有限制,只能为本网站的地址,该漏洞利用条件较为苛刻,需要目标网站存在任意文件上传漏洞或者存在可以上传图片的功能,伪造URL重定向后的恶意页面,获取目标用户的Token值等敏感信息。

漏洞流程:
1、url无限制



2、url有限制



漏洞利用:
直接讲解url有限制的漏洞

1、利用网站的任意文件上传漏洞上传一个恶意html页面,如hacker.html,其中设置document.referrer用以获取referrer中的Token值。

2、构造恶意URL链接如:
www.hacker.com?reponse\_type=code&client\_id=1234555&redirect\_url=www.hacker.com/hacker.html

3、诱导用户访问URL,我们就能获取到用户的token值了

0x06 ID、Secret泄漏
漏洞简介:
部分开发安全意识不强,将id和secret硬编码进apk中,或者在JS、heapdump、github上泄露出去,导致攻击者利用id和secret获取到token。

漏洞利用:
1、对目标app进行反编译,发现id和secret

2、发现是钉钉的id和secret,利用官方开发文档的代码获取到token,也可以直接利用官方的api获取tokenhttps://open-dev.dingtalk.com/ap ... .0%23GetAccessToken



0x07 postMessage XSS漏洞
漏洞简介:
Facebook OAuth2.0绕过漏洞,价值38wrmb的漏洞

漏洞流程:



漏洞利用:
Facebook官方网站staticxx.facebook.com中的7SWBAvHenEn.js为开发人员提供了JavaScript SDK接口接入,开发人员可以创建能够跨域通信的iframe,再使用window.postMessage()收发令牌。这就能够使一些跨站点脚本等攻击能够直接生效,不用在花精力去绕过CSP。

facebook利用/connect/ping接口获取access令牌,然后返回redirect_uri到/connect/xd_arbiter.php

https://www.facebook.com/connect/ping?client\_id=APP\_ID&redirect\_uri=https://staticxx.facebook.com/connect/xd\_arbiter.php?version=24&origin=

攻击者发现xd\_arbiter.php?version=42是可以被修改为白名单中的路径,比如修改为xd\_arbiter/?v=42,这样就可以在后面添加更多参数或者目录。通过这样的这种方式,我们可以获取到access令牌的hash值。然后借助JavaScript SDK创建iframe,再使用window.postMessage()将access令牌的hash值传送出来。于是可以构造出redirect_uri:

https://staticxx.facebook.com/connect/xd\_arbiter/r/?version=42

最终可以构造出如下链接,获取用户的token

https://www.facebook.com/connect ... ticxx.facebook.com/ connect/xd_arbiter/r/7SWBAvHenEn.js?version=44#origin=https://domain.com


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 23:55 , Processed in 0.012856 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表