
Scanner DOM XSS per applicazioni a pagina singola
DOMDig è uno scanner DOM XSS che viene eseguito all'interno del browser web Chromium e può scansionare applicazioni a pagina singola (SPA) in modo ricorsivo.
A differenza di altri scanner, DOMDig può analizzare qualsiasi applicazione web (inclusa gmail) tenendo traccia delle modifiche al DOM e delle richieste XHR/fetch/websocket e può simulare l'interazione reale di un utente generando eventi. Durante questo processo, i payload XSS vengono inseriti nei campi di input e la loro esecuzione viene tracciata per trovare punti di iniezione e le relative modifiche all'URL.
Si basa su htcrawl, una libreria node abbastanza potente da poter analizzare facilmente un account gmail.
git clone https://github.com/fcavallarin/domdig.git
cd domdig && npm i && cd ..
node domdig/domdig.js
node domdig.js -c 'foo=bar' -p http:127.0.0.1:8080 https://fcvl.net/htcap/scanme/domxss.php
DOMDig può eseguire tre diversi tipi di controllo:
Il controllo DOM XSS può essere configurato con diverse modalità, abilitando comportamenti differenti. Per impostazione predefinita, sono tutte abilitate.
Le modalità sono:
Analizza il DOM cercando punti in cui l'utente può iniettare codice JavaScript, ad esempio una casella di testo. Può scoprire punti di iniezione che non possono essere individuati da uno scanner. Un esempio potrebbe essere una funzione di ricerca che prende il testo di una casella di input e, per attivare la ricerca, lo inserisce nell'hash dell'URL come stringa JSON.
Sottopone a fuzzing l'URL (parametri di query e hash) per verificare se il nostro codice viene eseguito al caricamento della pagina. Se nessun codice viene eseguito, analizza il
DOM generando eventi HTML nella speranza di trovare qualcosa che esegua il nostro payload.
Può anche scoprire il classico Reflected XSS.
Dopo aver eseguito un controllo DOM XSS, DOMDig analizza la stessa pagina in attesa dell'esecuzione di payload precedentemente utilizzati. Se ne viene trovato uno, significa che può sopravvivere ai ricaricamenti della pagina.
Cerca punti in cui segnaposto di template (es. {var1}) potrebbero essere valutati come codice JavaScript.
Ogni vulnerabilità segnalata contiene i seguenti campi:
domxss, stored o templateinjDOMDig utilizza htcrawl come motore di analisi.
Il diagramma mostra il processo di analisi ricorsiva.
.
Il video qui sotto mostra il motore che analizza gmail. L'analisi è durata molte ore e sono state catturate circa 3000 richieste XHR.
Una sequenza di login (o sequenza iniziale) è un oggetto json contenente un elenco di azioni da eseguire prima dell'inizio della scansione. Ogni elemento dell'elenco è un array in cui il primo elemento è il nome dell'azione da eseguire e gli elementi rimanenti sono i "parametri" di tali azioni. Le azioni sono:
[
["navigate", "https://target.local/login-page"],
["write", "#username", "demo"],
["write", "#password", "demo"],
["sleep", 2],
["clickToNavigate", "#btn-login"]
]
I payload possono essere caricati da file json (opzione -P) come array di stringhe. Per creare payload personalizzati, la stringa window.___xssSink({0}) deve essere utilizzata come funzione da eseguire (invece della classica alert(1))
[
';window.___xssSink({0});',
'<img src="https://raw.githubusercontent.com/fcavallarin/domdig/HEAD/a" onerror="window.___xssSink({0})">'
]