Abbiamo già menzionato due tipi di exploit XSS : riflessi e archiviati, tutti hanno la caratteristica comune che il codice pericoloso, dopo essere stato inserito, verrà eseguito dopo la risposta del server, il che significa che l'errore risiede dal lato del server.server.server. Esiste un altro tipo di sfruttamento XSS che va contro questa funzionalità, il codice dannoso viene eseguito immediatamente sul lato client senza passare attraverso il server, noto come XSS basato su DOM o noto anche come XSS di tipo 0.
Prima di tutto dobbiamo sapere cos'è il DOM?
DOM, abbreviazione di Document Object Model, è una forma standard del W3C (http://www.w3.org/DOM/) proposta per recuperare e manipolare dati di documenti strutturati come HTML e XML. Questo modello rappresenta i documenti come una struttura ad albero gerarchica. Tutti gli elementi in HTML e XML sono considerati un nodo.
DOM Based XSS è una tecnica di sfruttamento XSS basata sulla modifica della struttura DOM del documento, in particolare HTML.
Diamo un'occhiata a un esempio specifico di seguito:
Un sito Web ha il seguente URL alla pagina di registrazione:
example.com/register.php?message=Please fill in the form
Quando accediamo, vediamo un modulo molto normale:
Puoi facilmente dedurre il parametro del messaggio passato nel contenuto della notifica nel modulo, osserva attentamente il codice sorgente di questa notifica:
Il segmento JavaScript è responsabile di ottenere il valore dal parametro del messaggio e di stamparlo. Da questo controllo lassista dell'input, è del tutto possibile indurre gli utenti ad accedere a URL pericolosi.
Invece di trasmettere:
message=Please fill in the form
poi trasmetti:
message=GenderMaleFemale
function show(){alert();}
Quindi il modulo di registrazione sarà simile a questo:
Gli utenti non sospetteranno di un modulo "normale" come questo e, quando selezionano il genere, verrà eseguito lo script:
Spiegherò qualcosa in più sul valore passato nel parametro message:
GenderMaleFemale
function show(){alert();}
Il suo scopo principale è eseguire la funzione show() ogni volta che c'è un evento onchage sul tag select. La funzione show() qui appare semplicemente per mostrare che lo script è stato eseguito. Tuttavia, in realtà, gli hacker utilizzano spesso questa funzione show() per eseguire uno script che trasmette il valore del cookie dell'utente a un server predeterminato. I lettori possono consultare l'articolo Reflected XSS che menziona come gli hacker creano What is this request look like?
Questo esempio ci fornisce due importanti conclusioni. Innanzitutto il codice dannoso veniva eseguito immediatamente dopo aver cliccato sul valore nel tag select, ovvero veniva eseguito direttamente sul lato client senza passare attraverso la risposta del server. In secondo luogo, la struttura HTML è stata modificata con lo script passato. E possiamo anche vedere l'effettivo scenario di sfruttamento, DOM Based è in qualche modo più simile a Reflected che Stored XSS quando si tratta di indurre gli utenti ad accedere a un URL incorporato con codice dannoso.
La figura seguente descrive ogni passaggio nell'implementazione della tecnica di attacco XSS basata su DOM:
Di seguito è riportato un video di un membro del forum WhiteHat.vn che esegue un exploit tramite XSS basato su DOM:
Buona fortuna!