mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'
This commit is contained in:
parent
5449a1ab06
commit
01d95a2040
@ -4,78 +4,125 @@
|
||||
|
||||
## DOM Invader
|
||||
|
||||
DOM Invader ist ein Browser-Tool, das im integrierten Browser von Burp installiert ist. Es hilft bei der **Erkennung von DOM XSS-Schwachstellen** mithilfe verschiedener Quellen und Senken, einschließlich Webnachrichten und Prototyp-Verschmutzung. Das Tool ist als Erweiterung vorinstalliert.
|
||||
DOM Invader ist ein Browser-Tool, das im **eingebauten Chromium-Browser von Burp Suite** installiert ist. Es hilft bei der **Erkennung von DOM XSS und anderen clientseitigen Schwachstellen** (Prototype Pollution, DOM Clobbering usw.), indem es automatisch **JavaScript-Quellen und -Senken instrumentiert**. Die Erweiterung wird mit Burp geliefert und muss nur aktiviert werden.
|
||||
|
||||
DOM Invader integriert einen Tab im DevTools-Panel des Browsers, der Folgendes ermöglicht:
|
||||
DOM Invader fügt dem DevTools-Panel des Browsers einen Tab hinzu, der es Ihnen ermöglicht:
|
||||
|
||||
1. **Identifizierung von kontrollierbaren Senken** auf einer Webseite für DOM XSS-Tests, die Kontext- und Sanitierungsdetails bereitstellt.
|
||||
2. **Protokollierung, Bearbeitung und erneutes Senden von Webnachrichten**, die über die `postMessage()`-Methode für DOM XSS-Tests gesendet werden. DOM Invader kann auch automatisch Schwachstellen mithilfe speziell gestalteter Webnachrichten erkennen.
|
||||
3. Erkennung von **client-seitigen Prototyp-Verschmutzungs**-Quellen und Scannen von kontrollierbaren Gadgets, die an riskante Senken gesendet werden.
|
||||
4. Identifizierung von **DOM Clobbering-Schwachstellen**.
|
||||
1. **Kontrollierbare Senken** in Echtzeit zu identifizieren, einschließlich Kontext (Attribut, HTML, URL, JS) und angewandter Sanitization.
|
||||
2. **`postMessage()`-Web-Nachrichten zu protokollieren, zu bearbeiten und erneut zu senden**, oder die Erweiterung sie automatisch mutieren zu lassen.
|
||||
3. **Clientseitige Prototype-Pollution-Quellen zu erkennen und nach Gadget→Sink-Ketten zu scannen**, die PoCs in Echtzeit generieren.
|
||||
4. **DOM Clobbering-Vektoren zu finden** (z. B. `id` / `name` Kollisionen, die globale Variablen überschreiben).
|
||||
5. **Verhalten fein abzustimmen** über eine umfangreiche Einstellungen-Benutzeroberfläche (benutzerdefinierter Canary, automatische Injektion, Umleitungsblockierung, Quellen/Senken-Listen usw.).
|
||||
|
||||
### Aktivieren
|
||||
---
|
||||
|
||||
Gehe im integrierten Browser von Burp zur **Burp-Erweiterung** und aktiviere sie:
|
||||
### 1. Aktivieren
|
||||
|
||||
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jetzt aktualisiere die Seite und im **Dev Tools** findest du den **DOM Invader-Tab:**
|
||||
1. Öffnen Sie **Proxy ➜ Intercept ➜ Open Browser** (Burps eingebetteter Browser).
|
||||
2. Klicken Sie auf das **Burp Suite**-Logo (oben rechts). Wenn es verborgen ist, klicken Sie zuerst auf das Puzzlestück.
|
||||
3. Aktivieren Sie im **DOM Invader**-Tab **Enable DOM Invader** und drücken Sie **Reload**.
|
||||
4. Öffnen Sie DevTools ( `F12` / Rechtsklick ➜ Untersuchen ) und docken Sie es an. Ein neues **DOM Invader**-Panel erscheint.
|
||||
|
||||
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
|
||||
> Burp merkt sich den Zustand pro Profil. Deaktivieren Sie es unter *Einstellungen ➜ Tools ➜ Burps Browser ➜ Einstellungen speichern...*, falls erforderlich.
|
||||
|
||||
### Inject a Canary
|
||||
### 2. Injektion eines Canaries
|
||||
|
||||
Im vorherigen Bild siehst du eine **zufällige Gruppe von Zeichen, das ist der Canary**. Du solltest jetzt beginnen, ihn in verschiedenen Teilen des Webs (Parameter, Formulare, URL...) zu **injizieren** und jedes Mal auf Suchen klicken. DOM Invader wird überprüfen, ob der **canary in einer interessanten Senke** endet, die ausgenutzt werden könnte.
|
||||
Ein **Canary** ist eine zufällige Markierungszeichenfolge (z. B. `xh9XKYlV`), die DOM Invader verfolgt. Sie können:
|
||||
|
||||
Darüber hinaus öffnen die Optionen **Inject URL params** und **Inject forms** automatisch einen **neuen Tab**, der den **canary** in jeden **URL**-Parameter und **Formular** injiziert, den er findet.
|
||||
* Es **kopieren** und manuell in Parameter, Formulare, Web-Socket-Rahmen, Web-Nachrichten usw. injizieren.
|
||||
* Die Schaltflächen **Inject URL params / Inject forms** verwenden, um einen neuen Tab zu öffnen, in dem der Canary automatisch an jeden Abfrage-Schlüssel/Wert oder jedes Formularfeld angehängt wird.
|
||||
* Nach einem **leeren Canary** suchen, um alle Senken unabhängig von der Ausnutzbarkeit offenzulegen (großartig für die Aufklärung).
|
||||
|
||||
### Inject an empty Canary
|
||||
#### Benutzerdefinierter Canary (2025+)
|
||||
|
||||
Wenn du nur potenzielle Senken finden möchtest, die die Seite haben könnte, auch wenn sie nicht ausnutzbar sind, kannst du **nach einem leeren canary suchen**.
|
||||
Burp 2024.12 führte **Canary-Einstellungen** ein (Burp-Logo ➜ DOM Invader ➜ Canary). Sie können:
|
||||
|
||||
### Post Messages
|
||||
* **Zufällig** oder eine **benutzerdefinierte Zeichenfolge** festlegen (hilfreich für Tests mit mehreren Tabs oder wenn der Standardwert natürlich auf der Seite erscheint).
|
||||
* Den Wert in die Zwischenablage **kopieren**.
|
||||
* Änderungen erfordern **Reload**.
|
||||
|
||||
DOM Invader ermöglicht das Testen von DOM XSS mithilfe von Webnachrichten mit Funktionen wie:
|
||||
---
|
||||
|
||||
1. **Protokollierung von Webnachrichten**, die über `postMessage()` gesendet werden, ähnlich der Protokollierung von HTTP-Anforderungs-/Antwortverläufen im Burp Proxy.
|
||||
2. **Änderung** und **erneutes Senden** von Webnachrichten, um manuell auf DOM XSS zu testen, ähnlich der Funktion von Burp Repeater.
|
||||
3. **Automatische Änderung** und das Senden von Webnachrichten zur Überprüfung von DOM XSS.
|
||||
### 3. Web-Nachrichten (`postMessage`)
|
||||
|
||||
#### Nachrichtendetails
|
||||
Der **Messages**-Untertab protokolliert jeden `window.postMessage()`-Aufruf und zeigt die Verwendung von `origin`, `source` und `data` an.
|
||||
|
||||
Detaillierte Informationen zu jeder Nachricht können durch Klicken darauf angezeigt werden, einschließlich, ob das client-seitige JavaScript auf die Eigenschaften `origin`, `data` oder `source` der Nachricht zugreift.
|
||||
• **Ändern & erneut senden**: Doppelklicken Sie auf eine Nachricht, bearbeiten Sie `data` und drücken Sie **Send** (ähnlich wie Burp Repeater).
|
||||
|
||||
- **`origin`** : Wenn die **Ursprungsinformationen der Nachricht nicht überprüft** werden, kannst du möglicherweise Cross-Origin-Nachrichten an den Ereignishandler **von einer beliebigen externen Domain** senden. Aber wenn es überprüft wird, könnte es trotzdem unsicher sein.
|
||||
- **`data`**: Hier wird die Payload gesendet. Wenn diese Daten nicht verwendet werden, ist die Senke nutzlos.
|
||||
- **`source`**: Bewertet, ob die Quell-Eigenschaft, die normalerweise auf ein iframe verweist, validiert wird, anstatt des Ursprungs. Selbst wenn dies überprüft wird, garantiert es nicht, dass die Validierung nicht umgangen werden kann.
|
||||
• **Auto-fuzz**: Aktivieren Sie **Postmessage interception ➜ Auto-mutate** in den Einstellungen, um DOM Invader zu ermöglichen, Canary-basierte Payloads zu generieren und sie an den Handler zurückzuspielen.
|
||||
|
||||
#### Antwort auf eine Nachricht
|
||||
Zusammenfassung der Feldbedeutungen:
|
||||
|
||||
1. Klicke im **Messages**-Bereich auf eine beliebige Nachricht, um das Nachrichten-Detaildialogfeld zu öffnen.
|
||||
2. Bearbeite das **Data**-Feld nach Bedarf.
|
||||
3. Klicke auf **Send**.
|
||||
* **origin** – ob der Handler `event.origin` validiert.
|
||||
* **data** – Payload-Standort. Wenn nicht verwendet, ist die Senke irrelevant.
|
||||
* **source** – Validierung der iframe / Fensterreferenz; oft schwächer als strikte Origin-Prüfung.
|
||||
|
||||
### Prototype Pollution
|
||||
---
|
||||
|
||||
DOM Invader kann auch nach **Prototype Pollution-Schwachstellen** suchen. Zuerst musst du es aktivieren:
|
||||
### 4. Prototype Pollution
|
||||
|
||||
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
|
||||
Aktivieren Sie unter **Einstellungen ➜ Angriffstypen ➜ Prototype Pollution**.
|
||||
|
||||
Dann wird es **nach Quellen suchen**, die es dir ermöglichen, beliebige Eigenschaften zum **`Object.prototype`** hinzuzufügen.
|
||||
Workflow:
|
||||
|
||||
1. **Durchsuchen** – DOM Invader kennzeichnet Pollution **Quellen** (`__proto__`, `constructor`, `prototype`), die in URL/Abfrage/Hash oder JSON-Web-Nachrichten gefunden werden.
|
||||
2. **Testen** – Klicken Sie auf *Test*, um einen PoC-Tab zu öffnen, in dem `Object.prototype.testproperty` existieren sollte:
|
||||
|
||||
Wenn etwas gefunden wird, erscheint ein **Test**-Button, um die gefundene Quelle zu **testen**. Klicke darauf, ein neuer Tab wird erscheinen, erstelle ein Objekt in der Konsole und überprüfe, ob die `testproperty` existiert:
|
||||
```javascript
|
||||
let b = {}
|
||||
b.testproperty
|
||||
let obj = {};
|
||||
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
|
||||
```
|
||||
Sobald Sie eine Quelle gefunden haben, können Sie **nach einem Gadget scannen**:
|
||||
3. **Nach Gadgets scannen** – DOM Invader bruteforced Eigenschaftsnamen und verfolgt, ob sie in gefährliche Senken (z. B. `innerHTML`) gelangen.
|
||||
4. **Ausnutzen** – Wenn eine Gadget-Sink-Kette gefunden wird, erscheint eine *Exploit*-Schaltfläche, die Quelle + Gadget + Senke verknüpft, um einen Alert auszulösen.
|
||||
|
||||
1. Ein neuer Tab wird von DOM Invader geöffnet, wenn der Button **Scan for gadgets**, der neben jeder identifizierten Prototype Pollution-Quelle in der **DOM**-Ansicht zu finden ist, angeklickt wird. Der Scan nach geeigneten Gadgets beginnt dann.
|
||||
2. In der gleichen Registerkarte sollte inzwischen der **DOM Invader**-Tab im DevTools-Panel geöffnet sein. Nach Abschluss des Scans werden alle über die identifizierten Gadgets zugänglichen Sinks in der **DOM**-Ansicht angezeigt. Zum Beispiel wird eine Gadget-Eigenschaft namens `html`, die an den `innerHTML`-Sink übergeben wird, im folgenden Beispiel gezeigt.
|
||||
Erweiterte Einstellungen (Zahnrad-Symbol):
|
||||
|
||||
## DOM-Clobbering
|
||||
* **CSP / X-Frame-Options entfernen**, um iframes während des Gadget-Scannens funktionsfähig zu halten.
|
||||
* **Scantechniken in separaten Frames** um `__proto__` vs `constructor`-Interferenzen zu vermeiden.
|
||||
* **Techniken** einzeln für fragile Apps deaktivieren.
|
||||
|
||||
Im vorherigen Bild ist zu sehen, dass der DOM-Clobbering-Scan aktiviert werden kann. Sobald dies geschehen ist, **beginnt DOM Invader nach DOM-Clobbering-Schwachstellen zu suchen**.
|
||||
---
|
||||
|
||||
### 5. DOM Clobbering
|
||||
|
||||
Aktivieren Sie **Angriffstypen ➜ DOM Clobbering**. DOM Invader überwacht dynamisch erstellte Elemente, deren `id`/`name`-Attribute mit globalen Variablen oder Formularobjekten kollidieren (`<input name="location">` → überschreibt `window.location`). Ein Eintrag wird erzeugt, wann immer benutzerkontrolliertes Markup zu einer Variablenersetzung führt.
|
||||
|
||||
---
|
||||
|
||||
## 6. Einstellungen Übersicht (2025)
|
||||
|
||||
DOM Invader ist jetzt in die Kategorien **Haupt / Angriffstypen / Sonstiges / Canary** unterteilt.
|
||||
|
||||
1. **Haupt**
|
||||
* **Enable DOM Invader** – globaler Schalter.
|
||||
* **Postmessage interception** – Protokollierung von Nachrichten ein-/ausschalten; Unter-Schalter für automatische Mutation.
|
||||
* **Benutzerdefinierte Quellen/Senken** – *Zahnrad-Symbol* ➜ spezifische Senken aktivieren/deaktivieren (z. B. `eval`, `setAttribute`), die die App brechen könnten.
|
||||
|
||||
2. **Angriffstypen**
|
||||
* **Prototype Pollution** (mit spezifischen Einstellungen pro Technik).
|
||||
* **DOM Clobbering**.
|
||||
|
||||
3. **Sonstiges**
|
||||
* **Umleitungsprävention** – blockiert clientseitige Umleitungen, damit die Senkenliste nicht verloren geht.
|
||||
* **Breakpoint vor Umleitung** – pausiert JS kurz vor der Umleitung zur Inspektion des Call-Stacks.
|
||||
* **Canary in alle Quellen injizieren** – injiziert Canary automatisch überall; konfigurierbare Quellen/Parameter-Whitelist.
|
||||
|
||||
4. **Canary**
|
||||
* Anzeigen / randomisieren / benutzerdefinierten Canary festlegen; in die Zwischenablage kopieren. Änderungen erfordern ein Neuladen des Browsers.
|
||||
|
||||
---
|
||||
|
||||
### 7. Tipps & Gute Praktiken
|
||||
|
||||
* **Verwenden Sie einen eindeutigen Canary** – vermeiden Sie gängige Zeichenfolgen wie `test`, da sonst falsch-positive Ergebnisse auftreten.
|
||||
* **Deaktivieren Sie schwere Senken** (`eval`, `innerHTML`) vorübergehend, wenn sie die Seitenfunktionalität während der Navigation beeinträchtigen.
|
||||
* **Kombinieren Sie mit Burp Repeater & Proxy** – replizieren Sie die Browser-Anfrage/Antwort, die einen verwundbaren Zustand erzeugte, und erstellen Sie endgültige Exploit-URLs.
|
||||
* **Denken Sie an den Rahmenkontext** – Quellen/Senken werden pro Browsing-Kontext angezeigt; Schwachstellen innerhalb von iframes benötigen möglicherweise manuelle Fokussierung.
|
||||
* **Beweise exportieren** – Rechtsklick auf das DOM Invader-Panel ➜ *Screenshot speichern*, um ihn in Berichte aufzunehmen.
|
||||
|
||||
---
|
||||
|
||||
## Referenzen
|
||||
|
||||
@ -85,5 +132,7 @@ Im vorherigen Bild ist zu sehen, dass der DOM-Clobbering-Scan aktiviert werden k
|
||||
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages)
|
||||
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution)
|
||||
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering)
|
||||
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary)
|
||||
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user