diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md index ac1764ba0..a7acc6cf9 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md @@ -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
-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. -
+> 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 -
+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 (`` → ü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}}