Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'

This commit is contained in:
Translator 2025-08-05 00:56:34 +00:00
parent 5449a1ab06
commit 01d95a2040

View File

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