当前位置:WooYun(白帽子技术社区) >> xss >> 让XSS攻击来得更猛烈些吧——一种新型的绕过XSS防御的方法

让XSS攻击来得更猛烈些吧——一种新型的绕过XSS防御的方法

world_in_hand | 2012-10-09 22:40

让XSS攻击来得更猛烈些吧
                                            一种新型的绕过XSS防御的方法

    大家都知道,普遍的防御XSS攻击的方法是在后台对以下字符进行转义:<、>、’、”,但是经过本人的研究发现,在一些特殊场景下,即使对以上字符进行了转义,还是可以执行XSS攻击的。

首先看一个JS的例子:
<script>
    var s = "\u003c\u003e";
    alert(s);
</script>

运行这段代码,结果显示如下:


看到这么熟悉的尖括号,大家会不会有一些兴奋的感觉呢?JS代码中并没有出现尖括号,可是运行时却输出了尖括号!!!这意味着:可以通过\u003c和\u003e来代替<和>。可是该如何利用这个特性来构造XSS攻击呢?继续看一个例子:
<div id='s'>
test
</div>
<script>
    var s = "\u003cimg src=1 onerror=alert(/xss/)\u003e";
    document.getElementById('s').innerHTML = s;
</script>

运行上面代码,结果显示如下:

在没有尖括号的情况下,成功实现了一个弹框的案例。

现在来设想一个更贴近实际开发情况的例子:
(1)假设某站的首页:http://www.victim.com/main.html,其代码为:
<div id="test">
   aa
</div>
<script>    
   function callback(obj)    
   {        
       document.getElementById("test").innerHTML = obj.name;    
   }
</script>
<script src=" http://www.victim.com/getcontent"></script>


(2)http://www.victim.com/getcontent返回的内容格式如下:
callback({"name":"xx"});
其中name的值是用户的昵称。
  
这个例子简单模拟了异步拉取信息并进行显示的情况。

现在假设用户的昵称为:
\u003cimg src=1 onerror=alert(/xss/)\u003e
那么会是什么情况呢?
首先getcontent返回的昵称应该是这样的:
\\u003cimg src=1 onerror=alert(/xss/)\\u003e
因为后台输出JSON格式数据时,一般都会在\前面添加转义符进行转义。
接着main.html的callback函数应该是等价于执行下面的语句:
document.getElementById("test").innerHTML =" \\u003cimg src=1 onerror=alert(/xss/)\\u003e";
显示的结果如下:
  
很遗憾,没有弹出框。原因是原来的转义序列\u003c并没有生效,被添加的转义符转义掉了。

不过这里假设返回昵称时对\进行了转义,但实际情况下,有时输出json格式数据时是没有对\进行转义的,那样就会触发漏洞。

对于有对\进行转义的,这时就轮到我们强大的半字符出场了。对于半字符的问题,这里并不打算详细讲,说下结论:
对于gb2312编码," [0xc0]\ "是一个合法的编码,显示为:"繺"。
对于UTF-8编码,在IE6下,上述组合也是一个合法的编码。
其中[0xc0]表示一个十六进制的值。

现在修改昵称为:[0xc0]\u003cimg src=1 onerror=alert(/xss/) [0xc0]\u003e,
getcontent输出:
callback({"name":"[0xc0]\\u003cimg src=1 onerror=alert(/xss/) [0xc0]\\u003e"});
由于半字符[0xc0]的存在,在解释上述JS代码时,等价于:
callback({"name":"繺\u003cimg src=1 onerror=alert(/xss/) 繺\u003e"});
可见,转义序列\u003c终于又回来了,显示结果如下:

上述昵称中并没有出现单双引号,尖括号,所以如果后台只是对单双引号和尖括号进行转义,那么是可以被绕过防御的。
总结:
(1)  利用场景:输出内容在JS代码里,并且被动态显示出来(如使用innerHTML)。
(2)  测试方法:截获请求包,修改参数为:%c0\u003cimg+src%3d1+onerror%3dalert(/xss/)+%c0\u003e
(3)  防御方法:后台对半字符,反斜杠,单双引号,尖括号进行处理。


一切皆有可能,跨站无处不在,发挥偶们强大的智慧来挖掘吧!

PS:图片上传不了

分享到:
  1. 1#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2012-10-09 22:51

    奇怪 图片应该可以上传的吧,你给我发个看看

  2. 2#
    回复此人 感谢
    蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2012-10-09 23:04

    一哥已经这么利用过了。

  3. 3#
    回复此人 感谢
    world_in_hand | 2012-10-09 23:13

    @蟋蟀哥哥 以前没看到类似的文章,我还以为是发现者呢,呵呵。

  4. 4#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2012-10-09 23:14

    @蟋蟀哥哥 人家总结嘛

  5. 5#
    回复此人 感谢
    Sogili (.) 长短短 (.) | 2012-10-09 23:18
  6. 6#
    回复此人 感谢
    Max (随便看看) | 2012-10-09 23:32

    @xsser 图片差不多有一个月不能上传了,我在zone里面发图基本都是提交到主站然后链接到zone.不知你们怎么传的。

  7. 7#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2012-10-09 23:42

    @Max 悲剧,似乎是ie不能传

  8. 8#
    回复此人 感谢
    VIP (Fatal error: Call to undefined function getwb() in /data1/www/htdocs/106/wzone/1/index.php on line 10|@齐迹@小胖子@z7y@nauscript|昨晚做梦梦见了一个ecshop注射0day,醒来后忘记在哪了。|预留广告位) | 2012-10-10 07:18

    @Max 我也是.。。。。。。。。。。。。或者就是换chrome传,然后把地址粘贴过来。。。。。。。。。

  9. 9# 感谢(1)
    回复此人 感谢
    gainover (">_< ' / & \ 看啥,没见过跨站字符么) | 2012-10-10 10:38

    挺好,昨天还有人问我\uXXXX在跨站里怎么用来着,下次我就可以直接贴这个帖子地址了。0xc0,没记错的话,最开始是在在80sec的一篇文章看到的

  10. 10#
    回复此人 感谢
    Sunshine (0123456789) | 2012-10-10 11:58

    总结的不错!

  11. 11#
    回复此人 感谢
    rayh4c | 2012-10-10 13:00

    不同浏览器和网页编码有区别。

  12. 12#
    回复此人 感谢
    Seay (x) | 2012-10-10 13:19

    @xsser 社区从木有上传成功过。。。都是在前台上传好了,拿地址过来的

  13. 13#
    回复此人 感谢
    瘦蛟舞 (科普是一种公益行为) | 2012-10-10 13:22

    先顶了再看。

  14. 14#
    回复此人 感谢
    瘦蛟舞 (科普是一种公益行为) | 2012-10-10 13:30

    DOM型XSS测试详解么,写的比书上清晰些袄,赞楼主了。

  15. 15#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2012-10-10 14:54

    @Seay 尽快修复,我这里chrome是没有问题的

  16. 16# 感谢(1)
    回复此人 感谢
    /fd (Http://prompt.ml) | 2012-10-10 14:59

    雙字節還能bypass掉XSS Auditor

  17. 17#
    回复此人 感谢
    汉时明月 (‮......核审在正长超名签 :) | 2012-10-11 14:50

    @xsser 我6月帖子就说无法上传http://zone.wooyun.org/content/366,我还以为是我ie问题

  18. 18#
    回复此人 感谢
    呆子不开口 (求各种兼职) | 2012-10-19 13:02

    这个就是js转义的问题,利用场景很有限

  19. 19#
    回复此人 感谢
    _Evil (科普是一种公益行为) | 2012-10-26 13:41

    = = @gainover 我记得你教我了10分钟 我就明白了DOM xss 会自己去找低价利用了。。。 你应该跳槽做安全讲师,真心!!!

  20. 20#
    回复此人 感谢
    Metasploit (www.metasploit.cn) | 2012-11-06 19:41
  21. 21#
    回复此人 感谢
    wdlei | 2012-11-10 12:32

    @Metasploit @xsser广告

  22. 22#
    回复此人 感谢
    imlonghao | 2012-11-10 12:41

    @Metasploit @xsser 快点散KEY,不然封号。。-,-

  23. 23#
    回复此人 感谢
    Metasploit (www.metasploit.cn) | 2012-11-10 16:09

    不是广告 是个描链 你要Metasploit还是Nexpose的KEY?

添加新回复

登录 后才能参与评论.

WooYun(白帽子技术社区)

网络安全资讯、讨论,跨站师,渗透师,结界师聚集之地

登录