<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>点击劫持 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E7%82%B9%E5%87%BB%E5%8A%AB%E6%8C%81/</link><description>Recent content in 点击劫持 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 04 Dec 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E7%82%B9%E5%87%BB%E5%8A%AB%E6%8C%81/index.xml" rel="self" type="application/rss+xml"/><item><title>点击劫持</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/security/security-008/</link><pubDate>Wed, 02 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/security/security-008/</guid><description>&lt;h2 id="一简介"&gt;一、简介&lt;/h2&gt;
&lt;p&gt;点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上，然后诱使用户在该网页上进行操作，此时用户在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置，可以诱使用户恰好点击在iframe页面的一些功能性按钮上。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/security/security-008/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;虽然受害者点击的是他所看到的网页，但其实他所点击的是被&lt;strong&gt;黑客精心构建的另一个置于原网页上面的透明页面&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Clickjacking 是仅此于 XSS 和 CSRF 的前端漏洞，因为需要诱使用户交互，攻击成本高，所以不被重视，但危害不容小觑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;点击劫持的步骤&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;黑客创建一个网页利用 iframe 包含目标网站；&lt;/li&gt;
&lt;li&gt;隐藏目标网站，使用户无法无法察觉到目标网站存在；&lt;/li&gt;
&lt;li&gt;构造网页，诱变用户点击特点按钮；&lt;/li&gt;
&lt;li&gt;用户在不知情的情况下点击按钮，触发执行恶意网页的命令；&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="二劫持类型"&gt;二、劫持类型&lt;/h2&gt;
&lt;h3 id="21-flash点击劫持"&gt;2.1 Flash点击劫持&lt;/h3&gt;
&lt;p&gt;攻击者通过flash构造了点击劫持，在完成一系列复杂的动作后，最终控制了用户的摄像头。&lt;/p&gt;
&lt;p&gt;攻击者制作了一个Flash游戏，这个游戏就是让用户去点击“CLICK”按钮，每次点击后这个按钮的位置都会发生变化。在Flash上面隐藏了一个看不见的iframe，游戏中某些点击时是有意义的，有些点击是无效的。 攻击通过诱导用户鼠标点击就能完成较复杂的动作。最终通过这一步步操作，打开了用户的摄像头。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/security/security-008/image-02.webp"&gt; &lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/security/security-008/image-03.webp"&gt;&lt;/p&gt;
&lt;h3 id="22-图片覆盖攻击"&gt;2.2 图片覆盖攻击&lt;/h3&gt;
&lt;p&gt;点击劫持是一种视觉上的欺骗手段。那么图片覆盖也可以起到类似的作用。简称XSIO（Cross Site Image Overlaying）&lt;/p&gt;
&lt;p&gt;&lt;em&gt;原理：&lt;/em&gt; 利用的是图片的style,或者能够控制CSS。如果应用没有限制style的position为absolute的话，图片可以覆盖到页面上的任意位置。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;img&lt;/span&gt; &lt;span style="color:#f92672"&gt;style&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;position: absolute; left: 100px; top: 100px&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用户点击图片，就会链接到其他网站。&lt;/p&gt;
&lt;p&gt;图片还可以伪装得像一个正常的链接、按钮；或者在图片中构造一些文字，覆盖在关键的位置，就有可能完全改变页面中想表达的意思。这种情况下，不需要用户点击，也能达到欺骗的目的。&lt;/p&gt;
&lt;p&gt;由于img标签在很多系统中是对用户开放的，因此在现实生活中有非常多的站点存在在XSIO攻击的可能。在防御XSIO时，需要检查用户提交的HTML代码中，img标签的style属性是否可能导致浮出。&lt;/p&gt;
&lt;h3 id="23-拖拽劫持与数据窃取"&gt;2.3 拖拽劫持与数据窃取&lt;/h3&gt;
&lt;p&gt;目前，许多浏览器都开始支持Drag和Drop的API。对于用户来说，拖拽使他们的操作更加简单。浏览器中的拖拽对象可以是一个链接，也可以是一段文字，还可以从一个窗口拖拽到另一个窗口，因此拖拽是_不受同源策略限制_的。&lt;/p&gt;
&lt;p&gt;拖拽劫持的思路是诱使用户从隐藏不可见iframe中拖拽出攻击者希望得到的数据，然后放到攻击者能控制的另外一个页面，从而窃取数据。在JavaScript的支持下，这个攻击过程会变得非常隐蔽，因为它突破了传统ClickJacking一些先天的局限，所以这种新型的拖拽劫持能够造成更大的破坏。&lt;/p&gt;
&lt;h3 id="24-clickjacking30触屏劫持"&gt;2.4 ClickJacking3.0：触屏劫持&lt;/h3&gt;
&lt;p&gt;智能手机的 &lt;em&gt;触屏劫持&lt;/em&gt; 攻击被斯坦福的&lt;a href="http://seclab.stanford.edu/websec/framebusting/tapjacking.pdf"&gt;安全研究者公布&lt;/a&gt;，这意味着ClickJacking的攻击方式更进一步，斯坦福安全研究者的将其称为TapJacking。&lt;/p&gt;
&lt;p&gt;从手机角度来看，触屏实际上就是一个事件，手机捕捉这些事件，并执行相应的动作。 常见的几个事件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-makefile" data-lang="makefile"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;touchstart&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; 手指触摸屏幕时发生
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;touchend&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; 手指离开屏幕时发生
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;touchmove&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; 手指滑动时发生
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;touchcancel&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; 系统可取消touch事件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将一个不可见的iframe覆盖到当前网页上，就可以劫持用户的触屏操作。&lt;/p&gt;
&lt;p&gt;在未来，随着移动设备中浏览器功能的丰富，我们会看到更多的TapJacking&lt;/p&gt;
&lt;h2 id="三防御"&gt;三、防御&lt;/h2&gt;
&lt;h3 id="31-防御clickjacking"&gt;3.1 防御ClickJacking&lt;/h3&gt;
&lt;h4 id="311-frame-busting"&gt;3.1.1 frame busting&lt;/h4&gt;
&lt;p&gt;通过可以写一段JavaScript代码，以禁止iframe的嵌套。这种方法叫作frame busting。比如&lt;/p&gt;</description></item></channel></rss>