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

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:

  1. Identificare i sink controllabili in tempo reale, inclusi contesto (attributo, HTML, URL, JS) e sanitizzazione applicata.
  2. Registrare, modificare e reinviare i messaggi web postMessage(), o lasciare che l'estensione li muta automaticamente.
  3. Rilevare sorgenti di inquinamento del prototipo lato client e scansionare catene gadget→sink, generando PoC al volo.
  4. Trovare vettori di DOM clobbering (ad es. collisioni id / name che sovrascrivono variabili globali).
  5. Affinare il comportamento tramite un'interfaccia utente delle impostazioni ricca (canary personalizzato, auto-iniezione, blocco dei reindirizzamenti, elenchi di sorgenti/sink, ecc.).

1. Abilitare

  1. Apri Proxy ➜ Intercept ➜ Open Browser (il browser integrato di Burp).
  2. Clicca sul logo Burp Suite (in alto a destra). Se è nascosto, clicca prima sul pezzo di puzzle.
  3. Nella scheda DOM Invader, attiva Enable DOM Invader e premi Reload.
  4. 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:

  1. Naviga – DOM Invader segnala le sorgenti di inquinamento (__proto__, constructor, prototype) trovate in URL/query/hash o messaggi web JSON.
  2. Testa – clicca su Test per aprire una scheda PoC in cui Object.prototype.testproperty dovrebbe esistere:
javascript
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
  1. Scansiona per gadget – DOM Invader forza i nomi delle proprietà e tiene traccia di eventuali che finiscono in sink pericolosi (ad es. innerHTML).
  2. 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__ e constructor.
  • 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.

  1. Main
  • Enable DOM Invader – interruttore globale.
  • Postmessage interception – attiva/disattiva la registrazione dei messaggi; sotto-interruttori per auto-mutazione.
  • Custom Sources/Sinksicona ingranaggio ➜ abilita/disabilita sink specifici (ad es. eval, setAttribute) che potrebbero rompere l'app.
  1. Attack Types
  • Prototype pollution (con impostazioni per tecnica).
  • DOM clobbering.
  1. 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.
  1. 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

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