# DOM Invader
{{#include ../../banners/hacktricks-training.md}}
## DOM Invader
DOM Invader is 'n blaaiertool wat geïnstalleer is in **Burp Suite se ingeboude Chromium-blaaier**. Dit help met **die opsporing van DOM XSS en ander kliënt-kant kwesbaarhede** (prototipe besoedeling, DOM klobbering, ens.) deur outomaties **JavaScript bronne en sinke te instrumenteer**. Die uitbreiding word saam met Burp gestuur en moet net geaktiveer word.
DOM Invader voeg 'n oortjie by die blaaiers se DevTools-paneel wat jou toelaat om:
1. **Beheersbare sinke** in werklike tyd te identifiseer, insluitend konteks (attribuut, HTML, URL, JS) en toegepaste sanitasie.
2. **Log, redigeer en stuur weer `postMessage()` web-boodskappe**, of laat die uitbreiding hulle outomaties verander.
3. **Kliënt-kant prototipe-besoedeling bronne opspoor en skandeer vir gadget→sink kettings**, wat PoCs on-the-fly genereer.
4. **Vind DOM klobbering vektore** (bv. `id` / `name` botsings wat globale veranderlikes oorskryf).
5. **Fynstel gedrag** via 'n ryk Instellings UI (aangepaste kanarie, outo-inspuiting, herleiding blokkering, bron/sink lyste, ens.).
---
### 1. Aktiveer dit
1. Maak **Proxy ➜ Intercept ➜ Open Browser** (Burp se ingebedde blaaiert).
2. Klik op die **Burp Suite** logo (bo-regs). As dit versteek is, klik eers op die legkaartstuk.
3. In die **DOM Invader** oortjie, skakel **Enable DOM Invader** AAN en druk **Reload**.
4. Maak DevTools oop ( `F12` / Regsklik ➜ Inspekteer ) en dock dit. 'n Nuwe **DOM Invader** paneel verskyn.
> Burp onthou die toestand per profiel. Deaktiveer dit onder *Instellings ➜ Gereedskap ➜ Burp se blaaiert ➜ Stoor instellings...* indien nodig.
### 2. Inspuit 'n Kanarie
'n **kanarie** is 'n ewekansige merkstring (bv. `xh9XKYlV`) wat DOM Invader volg. Jy kan:
* **Kopieer** dit en handmatig inspuit in parameters, vorms, Web-Socket rame, web-boodskappe, ens.
* Gebruik **Inject URL params / Inject forms** knoppies om 'n nuwe oortjie te open waar die kanarie outomaties by elke navraag sleutel/waarde of vorm veld gevoeg word.
* Soek vir 'n **leë kanarie** om alle sinke te onthul ongeag van eksploitabiliteit (groot vir verkenning).
#### Aangepaste kanarie (2025+)
Burp 2024.12 het **Kanarie instellings** bekendgestel (Burp-logo ➜ DOM Invader ➜ Kanarie). Jy kan:
* **Ewekansig maak** of 'n **aangepaste string** stel (nuttig vir multi-oortjie toetsing of wanneer die standaardwaarde natuurlik op die bladsy verskyn).
* **Kopieer** die waarde na die klembord.
* Veranderinge vereis **Reload**.
---
### 3. Web-boodskappe (`postMessage`)
Die **Boodskappe** sub-oortjie registreer elke `window.postMessage()` oproep, wat `origin`, `source`, en `data` gebruik toon.
• **Wysig & stuur weer**: dubbelklik op 'n boodskap, redigeer `data`, en druk **Stuur** (soos Burp Repeater).
• **Auto-fuzz**: aktiveer **Postmessage interception ➜ Auto-mutate** in instellings om DOM Invader toe te laat om kanarie-gebaseerde payloads te genereer en hulle aan die handler te herhaal.
Veld betekenis opsomming:
* **origin** – of die handler `event.origin` valideer.
* **data** – payload ligging. As ongebruik, is die sink irrelevant.
* **source** – iframe / venster verwysing validasie; dikwels swakker as streng oorsprong kontrole.
---
### 4. Prototipe Besoedeling
Aktiveer onder **Instellings ➜ Aanval tipes ➜ Prototipe besoedeling**.
Werkvloei:
1. **Blaai** – DOM Invader merk besoedeling **bronne** (`__proto__`, `constructor`, `prototype`) wat in URL/navraag/hash of JSON web-boodskappe gevind word.
2. **Toets** – klik *Toets* om 'n PoC oortjie te open waar `Object.prototype.testproperty` moet bestaan:
```javascript
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
```
3. **Skandeer vir gadgets** – DOM Invader brute-force eienskap name en volg of enige in gevaarlike sinke eindig (bv. `innerHTML`).
4. **Eksploiteer** – wanneer 'n gadget-sink ketting gevind word, verskyn 'n *Eksploiteer* knoppie wat bron + gadget + sink ketting om 'n waarskuwing te aktiveer.
Geavanceerde instellings (rat ikon):
* **Verwyder CSP / X-Frame-Options** om iframes werkbaar te hou tydens gadget skandering.
* **Skandeer tegnieke in aparte rame** om `__proto__` teen `constructor` interferensie te vermy.
* **Deaktiveer tegnieke** individueel vir brose toepassings.
---
### 5. DOM Klobbering
Skakel **Aanval tipes ➜ DOM klobbering** aan. DOM Invader monitor dinamies geskepte elemente wie se `id`/`name` attribuut met globale veranderlikes of vormobjekte bots (bv. `` → klobber `window.location`). 'n Inskrywing word geproduseer wanneer gebruikersbeheerde markup tot veranderlike vervanging lei.
---
## 6. Instellings Oorsig (2025)
DOM Invader is nou verdeel in **Hoof / Aanval Tipes / Divers / Kanarie** kategorieë.
1. **Hoof**
* **Enable DOM Invader** – globale skakel.
* **Postmessage interception** – skakel boodskaplogging aan/af; sub-skakelaars vir outo-mutasie.
* **Aangepaste Bronne/Sinke** – *rat ikon* ➜ aktiveer/deaktiveer spesifieke sinke (bv. `eval`, `setAttribute`) wat die toepassing kan breek.
2. **Aanval Tipes**
* **Prototipe besoedeling** (met per-tegniek instellings).
* **DOM klobbering**.
3. **Divers**
* **Herleiding voorkoming** – blokkeer kliënt-kant herleidings sodat die sink lys nie verlore gaan nie.
* **Breakpoint voor herleiding** – pauzeer JS net voor herleiding vir oproep-stapel inspeksie.
* **Inspuit kanarie in alle bronne** – auto-inspuit kanarie oral; konfigureerbare bron/parameter toelaat lys.
4. **Kanarie**
* Beskou / ewekansig maak / stel aangepaste kanarie; kopieer na klembord. Veranderinge vereis blaaiert herlaai.
---
### 7. Wenke & Goeie Praktyke
* **Gebruik 'n duidelike kanarie** – vermy algemene stringe soos `test`, anders gebeur vals positiewe.
* **Deaktiveer swaar sinke** (`eval`, `innerHTML`) tydelik as hulle bladsy funksionaliteit breek tydens navigasie.
* **Kombineer met Burp Repeater & Proxy** – repliseer die blaaiervraag/antwoord wat 'n kwesbare toestand geproduseer het en skep finale eksploit URL's.
* **Onthou raam omvang** – bronne/sinke word per blaai kontekst vertoon; kwesbaarhede binne iframes mag handmatige fokus benodig.
* **Eksporteer bewyse** – regsklik die DOM Invader paneel ➜ *Stoor skermskoot* om in verslae in te sluit.
---
## Verwysings
- [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)
- [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}}