139 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
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 ➜ Burps 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 (`<input name="location">` → 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}}