XSS之CSS expression
网页中<script>标签、元素事件、CSS表达式、支持JavaScript的伪协议均可执行脚本。仅IE中支持CSS expression,它允许用户在CSS中计算某个表达式。这个计算是通过JavaScript来实现的。直至CSS 2.1,开发者都无法在CSS里面进行算数运算,例如width:100px+3px获取不了103px的宽度。为了消除CSS的局限性,IE5-7提供了expresson函数(即CSS表达式)。expression会执行其中的函数,并以函数的返回值作为式子的值。
<p style="x:expression(alert(1))">
可以在HTTP头中添加X-UA-Compatible或者<META>标签中指定文档模式告诉浏览器应当模拟哪个版本的IE去渲染当前页面。
<meta http-equiv="x-ua-compatible" content="IE=7" >
yuange在2014年发布的VBS神洞(CVE-2014-6332),便是为了让IE11也能执行VBS,在利用代码的最开始加上了X-UA-Comatible标签让IE切换到IE8模式。
CSS expression XSS特点:
[*]CSS属性不区分大小写,ExPreSsion等价于expression
[*]CSS与JavaScript都支持注释符/**/,因此可以在expression表达式中插入任意注释符号,如x:expre/*abc*/ssion(ale/*abc*/rt(1))
[*]CSS支持HTML实体编码,如x:expression(alert(1))
[*]CSS中可以使用JS16进制编码,特殊之处在于省略了x后面的x字符,似的写法形似JS8进制,如<code>x:expression\28/**/alert(1)\29</code>
Note:为了避免和后面的内容产生误解所以使用注释符/**/分隔开。在IE7上如果后面不是数字,那么会被忽略掉。
页:
[1]