| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> OAuth安全相关问题 -> 正文阅读 |
|
[网络协议]OAuth安全相关问题 |
初识OAuth开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用.目前广泛使用的版本是OAuth 2.0.而OAuth2.0存在认证缺陷-即第三方帐号快捷登录授权可能被劫持。 OAuth 2.0中有6种常用的授权类型:
通过URL重定向获取OAuth Tokenredirect_uri过滤不严导致用户敏感信息泄露 重定向到我们自己的域名可以获取access token
? 开放重定向获取access token
腾讯OAuth平台redirect_uri过滤不严一1.测试发现,如果一个应用的回调域是www.a.com,授权平台是允许其跳转到以www.a.com为基域的其他子域的,比如sub.www.a.com(但是sub.a.com)是不行的. 2.腾讯授权平台对于URL域的判断没有考虑一些浏览器的特性,比如在url中存在\时,大多数浏览器是会将其变为/. 因此,授权平台认为www.b.com\.www.a.com 也是一个www.a.com的子域,而浏览器实际确是跳转到www.baidu.com/.www.a.com 从而引起token/code的泄露.
跳转到可控站点,泄漏code
利用泄漏的code即可直接劫持
腾讯OAuth平台redirect_uri过滤不严二
腾讯OAuth平台redirect_uri过滤不严三腾讯OAuth平台对redirect_uri校验时, 未考虑一些奇怪的浏览器特性, 导致redirect_uri检验被绕过. safari会对url中的full width字符自动转化为常见的字符, 比如下面这个url: http://www.test.com 那么同样的, 把/ # ?这类分割的字符 转化为full width字符后, 虽然服务器认为这样的字符已经不能分割了, 但在浏览器处理时, 依然进行了分割.
腾讯OAuth平台redirect_uri过滤不严四
通过重定向redirect_uri也可执行XSS
通过Refer获取OAuth信息当可以注入html标签但是由于各种过滤等情况无法XSS时候,我们可以利用oauth劫持 OAuth登录场景 ?当以QQ在电脑上已经进行了登陆,所以我可以直接进行登陆,这时候以QQ登入A.com进行抓包截取整个流程 。登入链接:
得到如下两个请求过程: 请求1:
Response1:
请求2:(生成授权码code后携带授权码请求a.com)
Response2:
此过程中经过了两次跨域 graph.qq.com->用户代理服务(tws Server) tws Server->a.com 在OAuth2协议中有保护机制防止‘泄露的’重定向URI,每个code参数都签发给对应的‘redirect_uri’。要获得访问令牌必须提供你在认证流程中使用的准确的redirect_uri。
构造一个URL
当用户载入这个url时,网站会重定向自己
假设a.com为百度云,ref与重定向如下 ?但是用户代理载入为:
那么用户代理会把发送请求的CODE泄露给我们的<img>
一旦我们获得受害者的CODE,我们点击 :
就可登录进受害者账号 先知大佬的一个案例 A.com代表目标A的域名来展示我是怎样发现一个账号劫持漏洞的。 打开A的QQ登陆链接后,我发现了一些奇妙的事。 如上图,redirect_uri并没有指向A.com,而是指向了B.com。将参数URL解码, ? 如上 这里涉及到2次跨域登陆:
QQ已经对redirect_uri参数做了强校验,要想劫持到B.com的登陆账号已经不太可能。所以,我的目标放在了s_url这个参数上。 简单分析一下登陆流程就能发现s_url是如何工作的。 (a)?首先,用户使用QQ账号登陆到B.com; (b)?然后B.com发送如下请求,获取token,并引导用户携带token跳转到A.com; (c)?A.com验证token是合法的,则种下cookie。 至此,用户成功登陆到A.com。 从整个登陆流程来看,只要我们能想办法窃取到token,就能劫持用户的登陆账号。 我的目标是窃取到token,最直接的办法当然是修改参数s_url,让用户携带token跳转到恶意域名,从而泄露token。 ?一番测试后,我发现s_url的校验也很严格,即使在路径后面附加一些字符,生成的跳转链接中都不会携带token。 ?经过一些fuzz后,我发现我似乎能在最后一个字符后面附加一些符号。 ? ?我可以在s_url的结尾附加3种符号,而不影响token的生成,分别是: 众所周知,URL中的#?将被浏览器视作锚点,其后的数据不会发送到服务器。 ?当用户跳转到这个地址,自然会无法认证成功,并停留在Login页面。 此时token也将出现在URL中。 ? 至此,我们已经在窃取token的道路上迈出了重要的一步。 那么,如何获取到URL中的token? 如果我们能找到一个XSS,就能获取 ? ? ? ? |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 11:39:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |