当前位置: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

厂商回复:

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

最新状态:

暂无