# Clickjacking
{{#include ../banners/hacktricks-training.md}}
## 什么是 Clickjacking
在 clickjacking 攻击中,**用户**被**欺骗**去**点击**网页上的一个**元素**,该元素要么是**不可见**的,要么伪装成其他元素。这种操控可能导致用户意想不到的后果,例如下载恶意软件、重定向到恶意网页、提供凭据或敏感信息、资金转移或在线购买产品。
### 预填充表单技巧
有时可以在加载页面时使用 GET 参数**填充表单字段的值**。攻击者可能会利用这种行为用任意数据填充表单,并发送 clickjacking 有效载荷,以便用户点击提交按钮。
### 使用拖放填充表单
如果您需要用户**填写表单**,但不想直接要求他写一些特定的信息(例如您知道的电子邮件或特定密码),您可以只要求他**拖放**一些东西,这样就会写入您控制的数据,如在[**这个例子**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)中所示。
### 基本有效载荷
```markup
Click me
```
### 多步骤有效载荷
```markup
Click me first
Click me next
```
### 拖放 + 点击有效载荷
```markup
.
1. Click and press delete button
3.Click me
2.DRAG ME TO THE RED BOX
```
### XSS + Clickjacking
如果您已识别出一个 **需要用户点击** 某个元素以 **触发** XSS 的 **XSS 攻击**,并且该页面 **易受点击劫持**,您可以利用它来欺骗用户点击按钮/链接。\
示例:\
NAN;_Y您在账户的某些私人细节中发现了一个 **自我 XSS**(只有您可以设置和读取的细节)。包含设置这些细节的 **表单** 的页面 **易受** **点击劫持**,您可以用 GET 参数 **预填充** **表单**。\
\_\_攻击者可以准备一个 **点击劫持** 攻击,通过 **预填充** **表单** 以包含 **XSS 负载**,并 **欺骗** **用户** **提交** 表单。因此,**当表单被提交** 且值被修改时,**用户将执行 XSS**。
## 减轻点击劫持的策略
### 客户端防御
在客户端执行的脚本可以采取措施防止点击劫持:
- 确保应用程序窗口是主窗口或顶部窗口。
- 使所有框架可见。
- 防止对不可见框架的点击。
- 检测并警告用户潜在的点击劫持尝试。
然而,这些框架破坏脚本可能会被规避:
- **浏览器的安全设置:** 一些浏览器可能会根据其安全设置或缺乏 JavaScript 支持来阻止这些脚本。
- **HTML5 iframe `sandbox` 属性:** 攻击者可以通过设置 `sandbox` 属性为 `allow-forms` 或 `allow-scripts` 值而不包含 `allow-top-navigation` 来中和框架破坏脚本。这会阻止 iframe 验证它是否是顶部窗口,例如,
```html
```
`allow-forms` 和 `allow-scripts` 值允许在 iframe 内进行操作,同时禁用顶级导航。为了确保目标站点的预期功能,可能需要额外的权限,如 `allow-same-origin` 和 `allow-modals`,具体取决于攻击类型。浏览器控制台消息可以指导允许哪些权限。
### 服务器端防御
#### X-Frame-Options
**`X-Frame-Options` HTTP 响应头** 通知浏览器关于在 `` 或 `