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

缺陷编号: WooYun-2012-16197

漏洞标题: [腾讯实例教程] 那些年我们一起学XSS - 10. Dom Xss进阶 [邂逅eval]

相关厂商: 腾讯

漏洞作者: 心伤的瘦子

提交时间: 2012-12-18 22:17

公开时间: 2013-02-01 22:18

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

危害等级: 低

自评Rank: 2

漏洞状态: 厂商已经确认

Tags标签: 反射型xss xss利用技巧 Dom+xss

5人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-12-18: 细节已通知厂商并且等待厂商处理中
2012-12-19: 厂商已经确认,细节仅向厂商公开
2012-12-29: 细节向核心白帽子及相关领域专家公开
2013-01-08: 细节向普通白帽子公开
2013-01-18: 细节向实习白帽子公开
2013-02-01: 细节向公众公开

简要描述:

前面的教程,说到了显式输出和隐式输出。但是不论怎么样,因为最终javascript都会通过document.write或innerHTML将内容输出到网页中,所以我们总是有办法看到输出到哪里。 但是有时候,我们的输出,最终并没有流向innerHTML或document.write,而是与eval发生了邂逅,我们该怎么挖掘并利用呢?

详细说明:

1. 我们直接上例子。



http://kf.qq.com/search_app.shtml?key=aaaaa





和前面的不同之处,这次我们搜索源代码和调试工具都看不到任何东西。



picture\4_50.jpg





2. 这个时候,我们可以看看Console,看看有没有其它有用的东西~~



一般来说,默认情况下,是不会有问题的。我们可以给参数加一些特殊符号。



这里我比较习惯用\,因为这玩意比较好使。当然你也可以用其它比较特殊的符号,比如双引号,单引号,只是被过滤掉的几率比较大。



这个时候,我们看看Console里面,多出了一条错误。



picture\7_51.jpg





我们可以点右侧,直接定位到错误代码。



picture\10_52.jpg





3. 点进去后,可以看到是哪个地方出错了。



picture\13_53.jpg





我们来看看这段代码:



var getarg = function()
{
var url = window.location.href;
var allargs = url.split("?")[1];
if (allargs!=null && allargs.indexOf("=")>0)
{
var args = allargs.split("&");
for(var i=0; i<args.length; i++)
{
var arg = args[i].split("=");
eval('this.'+arg[0]+'="'+arg[1]+'";');
}
}
};





和上一节教程类似,这段代码,实际上也是一个获取地址栏参数的代码。



比如,地址栏是key=aaaa; 那么 arg[0] 就是字符串'key', arg[1] 就是字符串 'aaaa';



那么eval这句就是执行的 eval('this.key="aaaa";')



picture\16_54.jpg





这样一来 , this.key="aaaa";这句就被执行了。



4. 如果这里我们把 key 换个写法呢?



this.key="aaaa";



this.key;alert(1);//="aaaa";



如下图:



picture\19_55.jpg





那么是不是将会执行我们的alert(1);呢?



5. 根据上面内容,我们可以构造代码。



http://kf.qq.com/search_app.shtml?key;alert(1);//=aaaa





HOHO~,如我们所愿的弹出了。



picture\22_56.jpg





6. 不知道看完上面的,有没有娃注意到,后面的 aaaa 不是也可以构造吗?



this.key="aaaa"; 换为



this.key="aaa";alert(1);//";



确实是如此 :)



http://kf.qq.com/search_app.shtml?key=aaa";alert(1);//





这个在IE下一样是可以的。



但是这样在chrome下却不行。 原因其实上面一节教程也提到过。



chrome会自动对", >, < 进行转换。



因而



this.key="aaa";alert(1);//";



会变成



this.key="aaa%22;alert(1);//";



从而失效。



7.上面就是本篇教程了,我们再来看看题外话。



其实以上问题,不是单独存在的。在另外一个页面也是存在的。



更多内容,参见本篇漏洞修复。

漏洞证明:

见详细说明

修复方案:

参照你们已经修复的类似文件即可。



http://kf.qq.com/wsearch.shtml

http://kf.qq.com/js/wsearch.js





本来上面这个文件也是存在漏洞的,估计这个位置已经被人报告给腾讯了,因而腾讯加了一次防御。我们看看腾讯的防御措施。



var getarg = function(){
.... 省略相同部分...
eval('this.' + arg[0] + '="' + HtmlAttributeEncode(arg[1]) + '";');
.... 省略相同部分...
}





也就是说,腾讯这里对后面的arg[1]进行了过滤。



接着,这个问题又被再次报告了,因而前些时候,腾讯又进一步做了修复。



var getarg = function(){
.... 省略相同部分...
if (arg[0] != null && arg[1] != null && (arg[0] == 'page' || arg[0] == 'count' || arg[0] == 'tag' || arg[0] == 'key' || arg[0] == 'total') )
{
eval('this.' + arg[0] + '="' + HtmlAttributeEncode(arg[1]) + '";');
}
.... 省略相同部分...
}





这一次,腾讯对 arg[0]进行了判断。



哈,补了东墙,补西墙。 不过呢?补了这个wsearch.js文件,还有我们现在分析的这个(css\3_search_app.js)文件。

版权声明:转载请注明来源 心伤的瘦子@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2012-12-19 10:21

厂商回复:

非常感谢您的报告。这个问题我们已经确认,正在与业务部门进行沟通制定解决方案。如有任何新的进展我们将会及时同步。

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(少于3人评价):
登陆后才能进行评分
100%
0%
0%
0%
0%

评论

  1. 2012-12-18 22:19 | 0x0F ( 普通白帽子 | Rank:220 漏洞数:57 | 这个人很聪明,什么证据都没有留下)
    0

    求细节连载URL。。

  2. 2012-12-18 22:19 | 鬼魅羊羔 ( 普通白帽子 | Rank:164 漏洞数:25 | 不许动!我是警察!)
    0

    尼玛,终于等到沙发了。。

  3. 2012-12-18 22:20 | dyun ( 实习白帽子 | Rank:75 漏洞数:12 )
    0

    强力mark

  4. 2012-12-18 22:24 | 鬼魅羊羔 ( 普通白帽子 | Rank:164 漏洞数:25 | 不许动!我是警察!)
    0

    我去,沙发没了?这不科学啊。。。

  5. 2012-12-19 09:20 | se55i0n ( 普通白帽子 | Rank:1156 漏洞数:129 | 我是一名白帽子,简称小白!)
    0

    @xsser 剑心,你说的关注连载的神马功能肿么还没放出来呀~~老湿教程出的老快了~~

  6. 2012-12-19 09:43 | Eoh ( 实习白帽子 | Rank:70 漏洞数:8 | While there is life there is hope.)
    0

    在搞就出书把 @心伤的瘦子

  7. 2012-12-19 11:00 | 小胖胖要减肥 ( 普通白帽子 | Rank:494 漏洞数:52 )
    0

    @se55i0n 等胖子瘦子一哥二哥的xss都看好基本也入门了 oh!yeah!

  8. 2012-12-19 11:03 | se55i0n ( 普通白帽子 | Rank:1156 漏洞数:129 | 我是一名白帽子,简称小白!)
    0

    @小胖胖要减肥 二哥的xss都比较大型,瘦子这个最适合我看~哈哈,不过二哥好像做了个xss教程忘记链接了,你可以在zone里找找~

  9. 2012-12-19 11:21 | 小胖胖要减肥 ( 普通白帽子 | Rank:494 漏洞数:52 )
    0

    @se55i0n Http://xsst.sinaapp.com/example/1-1.php 还有ppt的

  10. 2013-02-16 20:51 | mole3o ( 实习白帽子 | Rank:10 漏洞数:2 | 学生一枚,青春向上的白帽子。)
    0

    好人一生平安!