# DOM Invader {{#include ../../banners/hacktricks-training.md}} ## DOM Invader DOM Invader je alat za pretraživač instaliran u **ugrađenom Chromium pretraživaču Burp Suite-a**. Pomaže u **otkrivanju DOM XSS i drugih ranjivosti na klijentskoj strani** (zagađenje prototipa, DOM klobiranje, itd.) automatskim **instrumentiranjem JavaScript izvora i odredišta**. Ekstenzija dolazi sa Burp-om i samo je potrebno omogućiti je. DOM Invader dodaje karticu u DevTools panel pretraživača koja vam omogućava da: 1. **Identifikujete kontrolisane odredišta** u realnom vremenu, uključujući kontekst (atribut, HTML, URL, JS) i primenjenu sanitizaciju. 2. **Zabeležite, uredite i ponovo pošaljite `postMessage()` web-poruke**, ili dozvolite ekstenziji da ih automatski mutira. 3. **Otkrivanje izvora zagađenja prototipa na klijentskoj strani i skeniranje za gadget→sink lance**, generišući PoC-ove u hodu. 4. **Pronađite DOM klobirajuće vektore** (npr. `id` / `name` kolizije koje prepisuju globalne promenljive). 5. **Fino podesite ponašanje** putem bogatog UI za podešavanja (prilagođeni kanarinac, automatska injekcija, blokiranje preusmeravanja, liste izvora/odredišta, itd.). --- ### 1. Omogućite ga
1. Otvorite **Proxy ➜ Intercept ➜ Open Browser** (ugrađeni pretraživač Burp-a). 2. Kliknite na **Burp Suite** logo (gore desno). Ako je skriven, prvo kliknite na deo slagalice. 3. U **DOM Invader** kartici, prebacite **Enable DOM Invader** na ON i pritisnite **Reload**. 4. Otvorite DevTools ( `F12` / Desni klik ➜ Inspect ) i pričvrstite ga. Pojaviće se novi **DOM Invader** panel. > Burp pamti stanje po profilu. Onemogućite ga pod *Settings ➜ Tools ➜ Burp’s browser ➜ Store settings...* ako je potrebno. ### 2. Injektujte Kanarinca **Kanarac** je nasumični marker string (npr. `xh9XKYlV`) koji DOM Invader prati. Možete: * **Kopirati** ga i ručno injektovati u parametre, forme, Web-Socket okvire, web-poruke, itd. * Koristiti **Inject URL params / Inject forms** dugmad da otvorite novu karticu gde se kanarac automatski dodaje svakom ključu/vrednosti upita ili polju forme. * Pretražiti za **praznim kanarcem** da otkrijete sva odredišta bez obzira na mogućnost eksploatacije (odlično za izviđanje). #### Prilagođeni kanarac (2025+) Burp 2024.12 je uveo **Canary settings** (Burp-logo ➜ DOM Invader ➜ Canary). Možete: * **Nasumično** ili postaviti **prilagođeni string** (korisno za testiranje u više kartica ili kada se podrazumevana vrednost prirodno pojavljuje na stranici). * **Kopirati** vrednost u međuspremnik. * Promene zahtevaju **Reload**. --- ### 3. Web-poruke (`postMessage`) **Messages** podkartica beleži svaki `window.postMessage()` poziv, prikazujući korišćenje `origin`, `source` i `data`. • **Izmenite i ponovo pošaljite**: dvokliknite na poruku, izmenite `data`, i pritisnite **Send** (slično Burp Repeater-u). • **Auto-fuzz**: omogućite **Postmessage interception ➜ Auto-mutate** u podešavanjima da dozvolite DOM Invader-u da generiše kanarac-bazirane payload-ove i ponovo ih pošalje handler-u. Pojmovi polja: * **origin** – da li handler validira `event.origin`. * **data** – lokacija payload-a. Ako se ne koristi, odredište je irelevantno. * **source** – validacija reference iframe-a / prozora; često slabija od stroge provere porekla. --- ### 4. Zagađenje prototipa Omogućite pod **Settings ➜ Attack types ➜ Prototype pollution**. Tok rada: 1. **Pretražujte** – DOM Invader označava zagađenje **izvora** (`__proto__`, `constructor`, `prototype`) pronađenih u URL-u/upitu/hash-u ili JSON web-porukama. 2. **Testirajte** – kliknite *Test* da otvorite PoC karticu gde bi `Object.prototype.testproperty` trebao postojati: ```javascript let obj = {}; console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC' ``` 3. **Skenirajte za gadgete** – DOM Invader bruteforcuje imena svojstava i prati da li neka završe u opasnim odredištima (npr. `innerHTML`). 4. **Eksploatišite** – kada se pronađe lanac gadget-odredište, pojavljuje se dugme *Exploit* koje povezuje izvor + gadget + odredište da pokrene alert. Napredna podešavanja (ikona zupčanika): * **Uklonite CSP / X-Frame-Options** da zadržite iframe-ove funkcionalnim tokom skeniranja gadgeta. * **Skenirajte tehnike u odvojenim okvirima** da izbegnete ometanje `__proto__` vs `constructor`. * **Onemogućite tehnike** pojedinačno za krhke aplikacije. --- ### 5. DOM Klobiranje Prebacite **Attack types ➜ DOM clobbering**. DOM Invader prati dinamički kreirane elemente čiji `id`/`name` atributi kolidiraju sa globalnim promenljivama ili objektima forme (`` → klobira `window.location`). Unos se proizvodi svaki put kada korisnički kontrolisani markup dovede do zamene promenljive. --- ## 6. Pregled podešavanja (2025) DOM Invader je sada podeljen u **Main / Attack Types / Misc / Canary** kategorije. 1. **Main** * **Enable DOM Invader** – globalni prekidač. * **Postmessage interception** – uključite/isključite beleženje poruka; pod-prekidači za automatsku mutaciju. * **Custom Sources/Sinks** – *ikona zupčanika* ➜ omogućite/onemogućite specifična odredišta (npr. `eval`, `setAttribute`) koja mogu pokvariti aplikaciju. 2. **Attack Types** * **Prototype pollution** (sa podešavanjima po tehnici). * **DOM clobbering**. 3. **Misc** * **Redirect prevention** – blokirajte klijentska preusmeravanja kako lista odredišta ne bi bila izgubljena. * **Breakpoint before redirect** – pauzirajte JS neposredno pre preusmeravanja radi inspekcije call-stack-a. * **Inject canary into all sources** – automatski injektujte kanarac svuda; konfigurisana lista dozvoljenih izvora/parametara. 4. **Canary** * Prikaz / nasumično / postavite prilagođeni kanarac; kopirajte u međuspremnik. Promene zahtevaju ponovo učitavanje pretraživača. --- ### 7. Saveti i Dobre Prakse * **Koristite različit kanarac** – izbegavajte uobičajene stringove poput `test`, inače se javljaju lažno pozitivni rezultati. * **Privremeno onemogućite teške odredišta** (`eval`, `innerHTML`) ako ometaju funkcionalnost stranice tokom navigacije. * **Kombinujte sa Burp Repeater & Proxy** – replicirajte zahtev/odgovor pretraživača koji je proizveo ranjivo stanje i kreirajte konačne exploit URL-ove. * **Zapamtite opseg okvira** – izvori/odredišta se prikazuju po kontekstu pretraživanja; ranjivosti unutar iframe-ova mogu zahtevati ručnu pažnju. * **Izvezite dokaze** – desni klik na DOM Invader panel ➜ *Save screenshot* da uključite u izveštaje. --- ## Reference - [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}}