漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2012-016437
漏洞标题:[腾讯实例教程] 那些年我们一起学XSS - 13. Dom Xss实例 [Discuz X2.5]
相关厂商:腾讯
漏洞作者: 心伤的瘦子
提交时间:2012-12-24 16:00
修复时间:2013-02-07 16:01
公开时间:2013-02-07 16:01
漏洞类型:xss跨站脚本攻击
危害等级:低
自评Rank:5
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2012-12-24: 细节已通知厂商并且等待厂商处理中
2012-12-24: 厂商已经确认,细节仅向厂商公开
2013-01-03: 细节向核心白帽子及相关领域专家公开
2013-01-13: 细节向普通白帽子公开
2013-01-23: 细节向实习白帽子公开
2013-02-07: 细节向公众公开
简要描述:
我们教程的DOM XSS就到这里了。最后再给大家送上一个实例。希望大家能够体会到:XSS的上下文非常重要,如何结合上下文,利用未过滤字符,合理的构造,才是成功的关键。
哎,近几天相信别人有世界末日,跑到一个方舟里避难去了。结果3天过后,我发现世界还是如此的精彩,如此的辉煌,我就又出来了。咱们继续。
这年头,码字不容易,求月票。
详细说明:
1. 我们直接看实例点。
http://www.discuz.net/connect.php?receive=yes&mod=login&op=callback&referer=aaaaaaaaaaa&oauth_token=17993859178940955951&openid=A9446B35E3A17FD1ECBB3D8D42FC126B&oauth_signature=a6DLYVhIXQJeXiXkf7nVdbgntm4%3D&oauth_vericode=3738504772×tamp=1354305802
2. 可以看到我们的aaaaaaaaaa在源代码里有2处输出。
3. 看第2处,我们需要用双引号闭合,但是显然dz不会给我们这么明显的机会,被拦截了。
4. 我们把目光放在第一处,这一处很特殊,位于setTimeout函数的第一个参数里,setTimeout的第一个函数会将字符串作为脚本来执行。
我们把这一部分代码提取出来。
我们首先能想到的是闭合掉 单引号, 但是这里单引号已经被过滤了。
5. 那么是不是就没有办法了呢?我们可以看到setTimeout的第一个参数是字符串;我们前面的教程里说过一次,JS字符串中,字符还可以表示为unicode的形式。即:单引号还可以表示为\u0027或\x27。带着这个想法,我们可以试试\有没有被过滤。
幸运的是,这里还真没过滤 \
6. 接着我们就是构造代码了。
首先写好代码。
将里面的引号变为\u0027
代入到URL里。
可以看到弹出了cookies。
7. 其实这里存在一个问题。 这段JS代码里,第一句是location.href="某个地址"; 上面我们所演示的,是一个alert,暂停了location.href的发生。
如果我们把 alert(document.cookie); 换成插入某个JS文件的脚本代码,就会出现问题。
即:JS文件还没来得及加载,location.href="某个地址"; 这句就会被执行,从而跳转到另外一个页面了,继而导致失效。
8. 所以这里,我们有必要改进下执行JS的办法。如下,
我们可以直接让代码变成执行 location.href="javascript:alert(document.cookie)";
location.href='原来的字符串'.替换(所有字符,"新的字符");
同上,替换单引号,加号什么的。
最后利用代码。
可以看到,效果一样,这次就不会发生跳转从而导致加载JS失败咯。
9. 可以看到,这个实例,和前面DOM XSS入门时的例子其实本质上是一样的,不过输出最终进入的函数或者javascript语句不一样。
漏洞证明:
见详细说明
修复方案:
过滤掉 \
版权声明:转载请注明来源 心伤的瘦子@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:10
确认时间:2012-12-24 16:48
厂商回复:
非常感谢您的报告。这个问题我们已经确认,正在与业务部门进行沟通制定解决方案。如有任何新的进展我们将会及时同步。
最新状态:
暂无