mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
90 lines
6.3 KiB
Markdown
90 lines
6.3 KiB
Markdown
# 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:
|
|
|
|
<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:**
|
|
|
|
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### 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:
|
|
|
|
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
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}}
|