# DOM Invader
{{#include ../../banners/hacktricks-training.md}}
## 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 integriert einen Tab im DevTools-Panel des Browsers, der Folgendes 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**.
### Aktivieren
Gehe im integrierten Browser von Burp zur **Burp-Erweiterung** und aktiviere sie:
Jetzt aktualisiere die Seite und im **Dev Tools** findest du den **DOM Invader-Tab:**
### Inject a Canary
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.
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.
### Inject an empty Canary
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**.
### Post Messages
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.
#### Nachrichtendetails
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.
- **`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.
#### Antwort auf eine Nachricht
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**.
### Prototype Pollution
DOM Invader kann auch nach **Prototype Pollution-Schwachstellen** suchen. Zuerst musst du es aktivieren:
Dann wird es **nach Quellen suchen**, die es dir ermöglichen, beliebige Eigenschaften zum **`Object.prototype`** hinzuzufügen.
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
```
Sobald Sie eine Quelle gefunden haben, können Sie **nach einem Gadget scannen**:
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.
## DOM-Clobbering
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**.
## Referenzen
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader](https://portswigger.net/burp/documentation/desktop/tools/dom-invader)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss)
- [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)
{{#include ../../banners/hacktricks-training.md}}