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