mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'
This commit is contained in:
parent
8b191d0f28
commit
6b5ca9cecd
@ -4,78 +4,125 @@
|
||||
|
||||
## DOM Invader
|
||||
|
||||
DOM Invader è uno strumento del browser installato nel browser integrato di Burp. Aiuta a **rilevare vulnerabilità DOM XSS** utilizzando varie fonti e sink, inclusi messaggi web e inquinamento del prototipo. Lo strumento è preinstallato come estensione.
|
||||
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 integra una scheda all'interno del pannello DevTools del browser che consente quanto segue:
|
||||
DOM Invader aggiunge una scheda al pannello DevTools del browser che ti consente di:
|
||||
|
||||
1. **Identificazione dei sink controllabili** su una pagina web per il testing DOM XSS, fornendo dettagli sul contesto e sulla sanitizzazione.
|
||||
2. **Registrazione, modifica e reinvio di messaggi web** inviati tramite il metodo `postMessage()` per il testing DOM XSS. DOM Invader può anche rilevare automaticamente vulnerabilità utilizzando messaggi web appositamente creati.
|
||||
3. Rilevamento delle **fonti di inquinamento del prototipo lato client** e scansione di gadget controllabili inviati a sink rischiosi.
|
||||
4. Identificazione delle **vulnerabilità di clobbering DOM**.
|
||||
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.).
|
||||
|
||||
### Abilitalo
|
||||
---
|
||||
|
||||
Nel browser integrato di Burp vai all'**estensione Burp** e abilitalo:
|
||||
### 1. Abilitare
|
||||
|
||||
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ora aggiorna la pagina e nei **Dev Tools** troverai la **scheda DOM Invader:**
|
||||
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**.
|
||||
|
||||
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
|
||||
> Burp ricorda lo stato per profilo. Disabilitalo sotto *Settings ➜ Tools ➜ Burp’s browser ➜ Store settings...* se necessario.
|
||||
|
||||
### Inietta un Canary
|
||||
### 2. Iniettare un Canary
|
||||
|
||||
Nell'immagine precedente puoi vedere un **gruppo casuale di caratteri, che è il Canary**. Ora dovresti iniziare a **iniettarlo** in diverse parti del web (parametri, moduli, url...) e ogni volta cliccare su cerca. DOM Invader controllerà se il **canary è finito in qualche sink interessante** che potrebbe essere sfruttato.
|
||||
Un **canary** è una stringa di marcatura casuale (ad es. `xh9XKYlV`) che DOM Invader tiene traccia. Puoi:
|
||||
|
||||
Inoltre, le opzioni **Inietta parametri URL** e Inietta moduli apriranno automaticamente una **nuova scheda** **iniettando** il **canary** in ogni **parametro URL** e **modulo** che trova.
|
||||
* **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).
|
||||
|
||||
### Inietta un Canary vuoto
|
||||
#### Canary personalizzato (2025+)
|
||||
|
||||
Se vuoi solo trovare potenziali sink che la pagina potrebbe avere, anche se non sono sfruttabili, puoi **cercare un canary vuoto**.
|
||||
Burp 2024.12 ha introdotto **Canary settings** (Burp-logo ➜ DOM Invader ➜ Canary). Puoi:
|
||||
|
||||
### Messaggi Post
|
||||
* **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**.
|
||||
|
||||
DOM Invader consente di testare per DOM XSS utilizzando messaggi web con funzionalità come:
|
||||
---
|
||||
|
||||
1. **Registrazione dei messaggi web** inviati tramite `postMessage()`, simile alla registrazione della cronologia delle richieste/risposte HTTP di Burp Proxy.
|
||||
2. **Modifica** e **riemissione** di messaggi web per testare manualmente il DOM XSS, simile alla funzione di Burp Repeater.
|
||||
3. **Alterazione automatica** e invio di messaggi web per sondare il DOM XSS.
|
||||
### 3. Messaggi web (`postMessage`)
|
||||
|
||||
#### Dettagli del messaggio
|
||||
La sottoscheda **Messages** registra ogni chiamata a `window.postMessage()`, mostrando l'uso di `origin`, `source` e `data`.
|
||||
|
||||
Informazioni dettagliate possono essere visualizzate su ogni messaggio cliccandoci sopra, che includono se il JavaScript lato client accede alle proprietà `origin`, `data` o `source` del messaggio.
|
||||
• **Modifica e reinvia**: fai doppio clic su un messaggio, modifica `data` e premi **Send** (simile a Burp Repeater).
|
||||
|
||||
- **`origin`** : Se le **informazioni di origine del messaggio non vengono controllate**, potresti essere in grado di inviare messaggi cross-origin all'handler degli eventi **da un dominio esterno arbitrario**. Ma se viene controllato, potrebbe comunque essere insicuro.
|
||||
- **`data`**: Qui viene inviato il payload. Se questi dati non vengono utilizzati, il sink è inutile.
|
||||
- **`source`**: Valuta se la proprietà source, di solito riferita a un iframe, è convalidata invece dell'origine. Anche se questo è controllato, non assicura che la convalida non possa essere elusa.
|
||||
• **Auto-fuzz**: abilita **Postmessage interception ➜ Auto-mutate** nelle impostazioni per consentire a DOM Invader di generare payload basati su canary e riprodurli al gestore.
|
||||
|
||||
#### Rispondi a un messaggio
|
||||
Riepilogo del significato dei campi:
|
||||
|
||||
1. Dalla vista **Messaggi**, clicca su un messaggio qualsiasi per aprire la finestra di dialogo dei dettagli del messaggio.
|
||||
2. Modifica il campo **Data** come necessario.
|
||||
3. Clicca su **Invia**.
|
||||
* **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.
|
||||
|
||||
### Inquinamento del prototipo
|
||||
---
|
||||
|
||||
DOM Invader può anche cercare vulnerabilità di **Inquinamento del Prototipo**. Prima, devi abilitarlo:
|
||||
### 4. Inquinamento del Prototipo
|
||||
|
||||
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
|
||||
Abilita sotto **Settings ➜ Attack types ➜ Prototype pollution**.
|
||||
|
||||
Poi, cercherà **fonti** che ti consentono di aggiungere proprietà arbitrarie a **`Object.prototype`**.
|
||||
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:
|
||||
|
||||
Se viene trovata qualcosa, apparirà un pulsante **Test** per **testare la fonte trovata**. Clicca su di esso, apparirà una nuova scheda, crea un oggetto nella console e controlla se `testproperty` esiste:
|
||||
```javascript
|
||||
let b = {}
|
||||
b.testproperty
|
||||
let obj = {};
|
||||
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
|
||||
```
|
||||
Una volta trovato una sorgente puoi **scansionare per un gadget**:
|
||||
3. **Scansiona per gadget** – DOM Invader forza i nomi delle proprietà e tiene traccia di eventuali che finiscono in sink pericolosi (ad es. `innerHTML`).
|
||||
4. **Sfrutta** – quando viene trovata una catena gadget-sink appare un pulsante *Exploit* che collega sorgente + gadget + sink per attivare l'allerta.
|
||||
|
||||
1. Una nuova scheda viene aperta da DOM Invader quando il pulsante **Scan for gadgets**, che si trova accanto a qualsiasi sorgente di inquinamento del prototipo identificata nella vista **DOM**, viene cliccato. La scansione per gadget adatti inizia quindi.
|
||||
2. Nel frattempo, nella stessa scheda, la scheda **DOM Invader** dovrebbe essere aperta nel pannello DevTools. Dopo il completamento della scansione, qualsiasi sink accessibile tramite i gadget identificati viene visualizzato nella vista **DOM**. Ad esempio, una proprietà gadget chiamata `html` passata al sink `innerHTML` è mostrata nell'esempio qui sotto.
|
||||
Impostazioni avanzate (icona ingranaggio):
|
||||
|
||||
## DOM clobbering
|
||||
* **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.
|
||||
|
||||
Nell'immagine precedente è possibile vedere che la scansione per DOM clobbering può essere attivata. Una volta fatto, **DOM Invader inizierà a cercare vulnerabilità di DOM clobbering**.
|
||||
---
|
||||
|
||||
### 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/Sinks** – *icona ingranaggio* ➜ abilita/disabilita sink specifici (ad es. `eval`, `setAttribute`) che potrebbero rompere l'app.
|
||||
|
||||
2. **Attack Types**
|
||||
* **Prototype pollution** (con impostazioni per tecnica).
|
||||
* **DOM clobbering**.
|
||||
|
||||
3. **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.
|
||||
|
||||
4. **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
|
||||
|
||||
@ -85,5 +132,7 @@ Nell'immagine precedente è possibile vedere che la scansione per DOM clobbering
|
||||
- [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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user