一直以来困惑于利用CSS去触发xss

网页中<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" >

1.png

yuange在2014年发布的VBS神洞(CVE-2014-6332),便是为了让IE11也能执行VBS,在利用代码的最开始加上了X-UA-Comatible标签让IE切换到IE8模式。

CSS expression XSS特点:

  1. CSS属性不区分大小写,ExPreSsion等价于expression
  2. CSS与JavaScript都支持注释符/**/,因此可以在expression表达式中插入任意注释符号,如x:expre/*abc*/ssion(ale/*abc*/rt(1))
  3. CSS支持HTML实体编码,如x:&#x65xpression(alert(1))
  4. CSS中可以使用JS16进制编码,特殊之处在于省略了x后面的x字符,似的写法形似JS8进制,如x:expression\28/**/alert(1)\29。Note:为了避免和后面的内容产生误解所以使用注释符/**/分隔开。在IE7上如果后面不是数字,那么会被忽略掉。

2.png

相关文章:

https://www.jb51.net/web/539341.html

《白帽子讲浏览器安全》