某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 服务器端主题(翻译)

  • 客户端主题(翻译)

    • 客户端主题
    • 跨站脚本(XSS)

    • 跨站请求伪造(CSRF)

    • 跨域资源共享(CORS)

    • 点击劫持

      • 点击劫持
        • 什么是点击劫持?
        • 如何构造基本的点击劫持攻击
          • Clickbandit
        • 表单输入预填充中的点击劫持
        • 子窗口破坏程序
        • 将点击劫持与 DOM XSS 攻击相结合
        • 多步点击劫持
        • 如何防范点击劫持攻击
          • X-Frame-Options
          • 内容安全策略(CSP)
    • 基于DOM的漏洞

    • WebSockets

  • 高级主题(翻译)

  • 扩展阅读(翻译)

  • 个人学习笔记

  • 实验室做题记录

  • BurpSuite及官方实验室
  • 客户端主题(翻译)
  • 点击劫持
carsaid
2023-10-08
目录

点击劫持

翻译

原文:https://portswigger.net/web-security/clickjacking

- name: 翻译
  desc: 原文:https://portswigger.net/web-security/clickjacking
  bgColor: '#F0DFB1'
  textColor: 'green'
1
2
3
4

# 0点击劫持(UI重叠攻击/UI覆盖攻击)

在本节中,我们将解释什么是点击劫持,描述点击劫持攻击的常见示例,并讨论如何防范这些攻击。

# 1什么是点击劫持?

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

一个网络用户访问了某个诱饵网站(也许这是通过电子邮件提供的链接),然后单击了一个按钮以赢得奖品。在不知不觉中,他们被攻击者欺骗,按下了另一个隐藏按钮,这导致该用户 在另一个网站上的帐户 进行了支付。这是一个点击劫持攻击的例子。

该技术依赖于iframe标签,这将在其中包含一个不可见的、可操作的网页(或多个网页),该网页中又包含 隐藏的按钮或链接。iframe覆盖在用户预期的诱饵网页内容之上。这种攻击与 CSRF (opens new window) 攻击的不同之处在于,用户需要执行 单击按钮 之类的操作,而CSRF攻击 (opens new window)依赖于 在用户不知情的情况下 伪造整个请求。

Not Found Image

针对 CSRF 攻击的保护通常会使用 CSRF 令牌——特定于会话的一次性随机数。

CSRF 令牌不能缓解点击劫持攻击,因为这种会话是通过 从真实网站加载的内容 建立的,并且所有请求都发生在恶意域上。在这种情况下,CSRF 令牌将会被放入请求中,并作为 正常行为会话的一部分 传递给恶意服务器。与普通用户会话相比,这种攻击的不同之处在于 攻击过程发生在隐藏的iframe中。

实验室

如果您已经熟悉 点击劫持 漏洞背后的基本概念,并且只想在一些实际的、易受攻击的目标上练习和利用它们,那么您可以从下面的链接访问本主题中的所有实验室。

View all clickjacking labs >> (opens new window)

# 2如何构造基本的点击劫持攻击

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

<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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

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

实验室-学徒

基本点击劫持 与 CSRF令牌保护 >>

- name: 实验室-学徒
  desc: 基本点击劫持 与 CSRF令牌保护 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/clickjacking/lab-basic-csrf-protected
  bgColor: '#001350'
  textColor: '#39d50c'
1
2
3
4
5
6

# 2.1Clickbandit

尽管你可以手动创建一个点击劫持的概念证明,就像上面提到的那样,但这在实践中可能 相当繁琐且耗时。当你在野外测试点击劫持时,我们建议你使用 Burp 的Clickbandit (opens new window)工具。你可以使用浏览器访问可被框柱的页面,并在其上执行所需的操作,然后自动创建一个 HTML 文件,其中包含合适的点击劫持叠加层。你可以使用该工具,在几秒钟内生成交互式概念证明,而无需编写任何一行 HTML 或 CSS。

# 3表单输入预填充中的点击劫持

一些网站存在表单填写和提交操作,同时允许在提交之前使用 GET 参数来对表单输入进行预填充。其他网站在提交表单之前,可能要求用户提供文本。由于 GET 参数值构成了 URL 的一部分,因此可以修改目标 URL,以包含攻击者所选择的值,并将透明的 “提交” 按钮覆盖在诱饵站点上,就像 基本点击劫持示例 中展示的那样。

实验室-学徒

点击劫持 与 URL参数对表单数据输入进行预填充 >>

- name: 实验室-学徒
  desc: 点击劫持 与 URL参数对表单数据输入进行预填充 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/clickjacking/lab-prefilled-form-input
  bgColor: '#001350'
  textColor: '#39d50c'
1
2
3
4
5
6

# 4子窗口破坏程序

点击劫持攻击是可行的,只要网站可以被框柱。因此,预防性技术 - 限制网站生成子窗口的能力。通过 Web 浏览器制定的常见客户端保护是,使用子窗口破坏 或 子窗口阻断程序。这些可以通过专有的浏览器 JavaScript 组件或扩展插件(如 NoScript)来实现。这类程序通常经过精心设计,以便执行以下部分或全部行为:

  • 检查并强制设置 当前应用程序的窗口 为主窗口或顶部窗口,
  • 使所有 frame 可见,
  • 防止点击不可见的 frame,
  • 拦截并向用户标记 潜在的点击劫持攻击。

子窗口破坏技术通常是特定于浏览器和平台的,但由于 HTML 的灵活性,攻击者通常可以绕过它们。由于子窗口破坏程序是通过 JavaScript 实现的,因此浏览器的安全设置可能会阻止其操作,甚至于浏览器可能不支持 JavaScript。攻击者 对付子窗口破坏程序 的一个有效方法是使用 HTML5 中 iframe 标签的sandbox属性。当该属性的参数值被设置为allow-forms或allow-scripts,并且其中不存在参数值allow-top-navigation时,则 子窗口破坏程序 可以被中和,因为 iframe 无法检查它是否是顶部窗口:

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

allow-forms和allow-scripts值都允许在 iframe 中执行指定的操作,但顶级导航处于禁用状态。这会抑制子窗口破坏行为,同时允许目标站点内的功能。

实验室-学徒

点击劫持 与 子窗口破坏程序 >>

- name: 实验室-学徒
  desc: 点击劫持 与 子窗口破坏程序 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/clickjacking/lab-frame-buster-script
  bgColor: '#001350'
  textColor: '#39d50c'
1
2
3
4
5
6

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

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

实验室-从业者

利用点击劫持漏洞触发基于DOM的XSS >>

- name: 实验室-从业者
  desc: 利用点击劫持漏洞触发基于DOM的XSS >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/clickjacking/lab-exploiting-to-trigger-dom-based-xss
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 6多步点击劫持

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

实验室-从业者

多步点击劫持 >>

- name: 实验室-从业者
  desc: 多步点击劫持 >>
  avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
  link: https://portswigger.net/web-security/clickjacking/lab-multistep
  bgColor: '#001350'
  textColor: '#4cc1ff'
1
2
3
4
5
6

# 7如何防范点击劫持攻击

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

点击劫持是一种浏览器端行为,其成功与否 取决于浏览器功能,以及其是否符合现行的 Web 标准和最佳实践。而针对点击劫持的服务器端保护,是通过定义和传达对使用 iframe 等组件时的约束来实现的。但是,保护的实际实现取决于 浏览器合规性和这些约束的实施程度。服务器端点击劫持保护机制有两种,分别是X-Frame-Options和内容安全策略 (opens new window)。

学习更多

使用Burp Suite的Web漏洞扫描器查找点击劫持漏洞 (opens new window)

# 7.1X-Frame-Options

X-Frame-Options最初是在 Internet Explorer 8 中作为非官方响应标头引入的,并迅速被其他浏览器采用。该标头为网站所有者提供了对 iframe 或对象使用的控制,以便可以使用deny指令来禁止在子窗口中包含网页:

X-Frame-Options: deny
1

或者,可以使用sameorigin指令将子窗口限制为 与网站相同的源:

X-Frame-Options: sameorigin
1

或使用allow-from指令设置指定网站:

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

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

# 7.2内容安全策略(CSP (opens new window))

内容安全策略(CSP)是一种检测和预防机制,可提供针对 XSS 和点击劫持等攻击的缓解措施。CSP 通常在 Web 服务器中实现为以下形式的返回标头:

Content-Security-Policy: <策略>
1

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

建议的点击劫持保护是,将frame-ancestors指令合并到应用程序的内容安全策略中。frame-ancestors 'none'指令的行为类似于 X-Frame-Options 中的deny指令。frame-ancestors 'self'指令与 X-Frame-Options 中的sameorigin指令大致相同。以下 CSP 仅将子窗口列入同一域的白名单:

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

或者,可以将子窗口限制为指定的站点:

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

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

学习更多

使用CSP防止点击劫持 (opens new window)

编辑 (opens new window)
CORS和Access-Control-Allow-Origin响应标头
基于DOM的漏洞

← CORS和Access-Control-Allow-Origin响应标头 基于DOM的漏洞→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式