DOM Invader
Reading time: 7 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
DOM Invader
DOM Invader è uno strumento del browser installato nel browser Chromium integrato di Burp Suite. Aiuta a rilevare DOM XSS e altre vulnerabilità lato client (inquinamento del prototipo, DOM clobbering, ecc.) automatizzando l'istrumentazione delle sorgenti e dei sink JavaScript. L'estensione viene fornita con Burp e deve solo essere abilitata.
DOM Invader aggiunge una scheda al pannello DevTools del browser che ti consente di:
- Identificare i sink controllabili in tempo reale, inclusi contesto (attributo, HTML, URL, JS) e sanitizzazione applicata.
- Registrare, modificare e reinviare i messaggi web
postMessage()
, o lasciare che l'estensione li muta automaticamente. - Rilevare sorgenti di inquinamento del prototipo lato client e scansionare catene gadget→sink, generando PoC al volo.
- Trovare vettori di DOM clobbering (ad es. collisioni
id
/name
che sovrascrivono variabili globali). - Affinare il comportamento tramite un'interfaccia utente delle impostazioni ricca (canary personalizzato, auto-iniezione, blocco dei reindirizzamenti, elenchi di sorgenti/sink, ecc.).
1. Abilitare
.png)
- Apri Proxy ➜ Intercept ➜ Open Browser (il browser integrato di Burp).
- Clicca sul logo Burp Suite (in alto a destra). Se è nascosto, clicca prima sul pezzo di puzzle.
- Nella scheda DOM Invader, attiva Enable DOM Invader e premi Reload.
- Apri DevTools (
F12
/ Clic destro ➜ Ispeziona ) e aggancialo. Appare un nuovo pannello DOM Invader.
Burp ricorda lo stato per profilo. Disabilitalo sotto Settings ➜ Tools ➜ Burp’s browser ➜ Store settings... se necessario.
2. Iniettare un Canary
Un canary è una stringa di marcatura casuale (ad es. xh9XKYlV
) che DOM Invader tiene traccia. Puoi:
- Copiare e iniettare manualmente nei parametri, nei moduli, nei frame Web-Socket, nei messaggi web, ecc.
- Usare i pulsanti Inject URL params / Inject forms per aprire una nuova scheda in cui il canary viene aggiunto automaticamente a ogni chiave/valore di query o campo del modulo.
- Cercare un canary vuoto per rivelare tutti i sink indipendentemente dall'exploitabilità (ottimo per la ricognizione).
Canary personalizzato (2025+)
Burp 2024.12 ha introdotto Canary settings (Burp-logo ➜ DOM Invader ➜ Canary). Puoi:
- Randomizzare o impostare una stringa personalizzata (utile per test su più schede o quando il valore predefinito appare naturalmente sulla pagina).
- Copiare il valore negli appunti.
- Le modifiche richiedono Reload.
3. Messaggi web (postMessage
)
La sottoscheda Messages registra ogni chiamata a window.postMessage()
, mostrando l'uso di origin
, source
e data
.
• Modifica e reinvia: fai doppio clic su un messaggio, modifica data
e premi Send (simile a Burp Repeater).
• Auto-fuzz: abilita Postmessage interception ➜ Auto-mutate nelle impostazioni per consentire a DOM Invader di generare payload basati su canary e riprodurli al gestore.
Riepilogo del significato dei campi:
- origin – se il gestore convalida
event.origin
. - data – posizione del payload. Se non utilizzato, il sink è irrilevante.
- source – convalida del riferimento iframe / finestra; spesso più debole rispetto al controllo di origine rigoroso.
4. Inquinamento del Prototipo
Abilita sotto Settings ➜ Attack types ➜ Prototype pollution.
Flusso di lavoro:
- Naviga – DOM Invader segnala le sorgenti di inquinamento (
__proto__
,constructor
,prototype
) trovate in URL/query/hash o messaggi web JSON. - Testa – clicca su Test per aprire una scheda PoC in cui
Object.prototype.testproperty
dovrebbe esistere:
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
- Scansiona per gadget – DOM Invader forza i nomi delle proprietà e tiene traccia di eventuali che finiscono in sink pericolosi (ad es.
innerHTML
). - Sfrutta – quando viene trovata una catena gadget-sink appare un pulsante Exploit che collega sorgente + gadget + sink per attivare l'allerta.
Impostazioni avanzate (icona ingranaggio):
- Rimuovi CSP / X-Frame-Options per mantenere gli iframe funzionanti durante la scansione dei gadget.
- Scansiona tecniche in frame separati per evitare interferenze tra
__proto__
econstructor
. - Disabilita tecniche singolarmente per app fragili.
5. DOM Clobbering
Attiva Attack types ➜ DOM clobbering. DOM Invader monitora gli elementi creati dinamicamente i cui attributi id
/name
collidono con variabili globali o oggetti di modulo (<input name="location">
→ sovrascrive window.location
). Viene prodotto un ingresso ogni volta che un markup controllato dall'utente porta a una sostituzione di variabile.
6. Panoramica delle Impostazioni (2025)
DOM Invader è ora suddiviso in categorie Main / Attack Types / Misc / Canary.
- Main
- Enable DOM Invader – interruttore globale.
- Postmessage interception – attiva/disattiva la registrazione dei messaggi; sotto-interruttori per auto-mutazione.
- Custom Sources/Sinks – icona ingranaggio ➜ abilita/disabilita sink specifici (ad es.
eval
,setAttribute
) che potrebbero rompere l'app.
- Attack Types
- Prototype pollution (con impostazioni per tecnica).
- DOM clobbering.
- Misc
- Redirect prevention – blocca i reindirizzamenti lato client in modo che l'elenco dei sink non venga perso.
- Breakpoint before redirect – pausa JS appena prima del reindirizzamento per ispezionare lo stack di chiamate.
- Inject canary into all sources – inietta automaticamente il canary ovunque; lista di autorizzazione configurabile per sorgenti/parametri.
- Canary
- Visualizza / randomizza / imposta canary personalizzato; copia negli appunti. Le modifiche richiedono il ricaricamento del browser.
7. Suggerimenti e Buone Pratiche
- Usa un canary distinto – evita stringhe comuni come
test
, altrimenti si verificano falsi positivi. - Disabilita sink pesanti (
eval
,innerHTML
) temporaneamente se rompono la funzionalità della pagina durante la navigazione. - Combina con Burp Repeater & Proxy – replica la richiesta/risposta del browser che ha prodotto uno stato vulnerabile e crea URL di exploit finali.
- Ricorda il contesto del frame – sorgenti/sink sono visualizzati per contesto di navigazione; le vulnerabilità all'interno degli iframe potrebbero necessitare di attenzione manuale.
- Esporta prove – clicca con il tasto destro sul pannello DOM Invader ➜ Salva screenshot da includere nei rapporti.
Riferimenti
- 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/dom-xss
- 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/dom-clobbering
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.