这里说的CSS是指层叠样式表。bluehat上的这个PPT不错啊:
http://www.thespanner.co.uk/wp-content/uploads/2008/10/the_sexy_assassin2ppt.zip。介绍了许多使用CSS来完成的攻击思路。
成为历史或即将成为历史的-moz-binding(FF)、expression(IE)、@import(IE)、background属性里的javascript伪协议等带来的跨站攻击,有些还在疯狂的跑啊,比如expression,IE8就已经放弃了它。
等到哪天CSS3流行起来了,相应的攻击技巧也会熟练起来,随着CSS3与用户界面的交互性变强,新的攻击向量也就来了。CSS3增加了属性选择符,利用这个的攻击思路可以看上面的PPT。下面是CSS3选择符的列表:
| 选择符类型 |
表达式 |
描述 |
| 子串匹配的属性选择符 |
E[att^="val"] |
匹配具有att属性、且值以val开头的E元素 |
| 子串匹配的属性选择符 |
E[att$="val"] |
匹配具有att属性、且值以val结尾的E元素 |
| 子串匹配的属性选择符 |
E[att*="val"] |
匹配具有att属性、且值中含有val的E元素 |
| 结构性伪类 |
E:root |
匹配文档的根元素。在HTML中,根元素永远是HTML |
| 结构性伪类 |
E:nth-child(n) |
匹配父元素中的第n个子元素E |
| 结构性伪类 |
E:nth-last-child(n) |
匹配父元素中的倒数第n个结构子元素E |
| 结构性伪类 |
E:nth-of-type(n) |
匹配同类型中的第n个同级兄弟元素E |
| 结构性伪类 |
E:nth-last-of-type(n) |
匹配同类型中的倒数第n个同级兄弟元素E |
| 结构性伪类 |
E:last-child |
匹配父元素中最后一个E元素 |
| 结构性伪类 |
E:first-of-type |
匹配同级兄弟元素中的第一个E元素 |
| 结构性伪类 |
E:only-child |
匹配属于父元素中唯一子元素的E |
| 结构性伪类 |
E:only-of-type |
匹配属于同类型中唯一兄弟元素的E |
| 结构性伪类 |
E:empty |
匹配没有任何子元素(包括text节点)的元素E |
| 目标伪类 |
E:target |
匹配相关URL指向的E元素 |
| UI元素状态伪类 |
E:enabled |
匹配所有用户界面(form表单)中处于可用状态的E元素 |
| UI元素状态伪类 |
E:disabled |
匹配所有用户界面(form表单)中处于不可用状态的E元素 |
| UI元素状态伪类 |
E:checked |
匹配所有用户界面(form表单)中处于选中状态的元素E |
| UI元素状态伪类 |
E::selection |
匹配E元素中被用户选中或处于高亮状态的部分 |
| 否定伪类 |
E:not(s) |
匹配所有不匹配简单选择符s的元素E |
| 通用兄弟元素选择器 |
E ~ F |
匹配E元素之后的F元素 |
在CSS里进行CSRF呢?至少我在使用,可以这样:
<style>
body{
background-image:url('http://www.zhanzuo.com/inbox/box_in.php?m=delete¬e_id=46374&folder=1')
}
</style>
<body></body>
发起一个get型的CSRF攻击:)。其实想想CSRF的攻击原理就可以很容易扩充CSRF使用面。比如:在flash9中,一些flash 9的组件,比如UILoader、ScrallPane等都有source属性。我们是可以设置其source为某个具有“CSRF性质”的URL,然后发起get型的CSRF攻击。
这里列出了好些CSS攻击的demos。