-: In questa
lezione e nelle prossime, parleremo di una vulnerabilità chiamata XSS.
XSS è l'abbreviazione di Cross Site Scripting.
Questo tipo di vulnerabilità consente a un
utente malintenzionato di inserire JavaScript in una pagina.
Quindi JavaScript è un linguaggio di programmazione.
E utilizzando questa vulnerabilità un utente
malintenzionato sarebbe in grado di eseguire codice, scritto
in JavaScript, in una
determinata pagina di un
sito web.
JavaScript è un linguaggio lato
client, quindi quando il codice viene eseguito,
verrà eseguito sul client, sull'utente, sulla
persona che stava navigando nella pagina web.
Non verrà eseguito sul server,
quindi anche se il tuo
codice risultasse in una shell inversa,
la shell proverrà dall'utente che sta
navigando nella
pagina e non proverrà dal sito web.
Quindi qualsiasi codice che scrivi in JavaScript verrà sfruttato o
verrà eseguito sull'utente di destinazione, sulle
persone che vedono
le pagine e non sul server web.
Quindi il server web verrà utilizzato solo come mezzo
per eseguire il codice o consegnare il codice.
Esistono tre tipi principali di vulnerabilità XSS,
persistenti o archiviate, riflesse
e
basate su DOM.
L'XSS archiviato viene archiviato nel database, quindi il codice che
inietti verrà archiviato nel database o nella pagina, in
modo che
ogni volta che qualsiasi persona visualizza quella pagina
il tuo codice verrà eseguito.
Quello riflesso, il
codice verrà eseguito solo
quando l'utente di destinazione esegue un URL specifico
creato o scritto da te.
Quindi manipolerai una sorta di URL e
lo invierai a una destinazione
e quando eseguono
quella destinazione, quando eseguono quell'URL, il codice verrà eseguito.
Il DOM si basa sul codice JavaScript scritto
sul client.
Quindi il codice verrà effettivamente interpretato
ed eseguito sul lato
client senza avere alcuna comunicazione con il web server.
Questi potrebbero essere molto
pericolosi perché a volte i server Web applicano una sorta di sicurezza
e filtraggio per verificare la presenza di XSS.
Ma con il DOM basato il codice non viene mai inviato
al server web.
Quindi il codice verrà interpretato ed eseguito sul browser
web senza nemmeno interagire con il server web.
E questi saranno presenti nei siti Web che
aggiornano il loro contenuto senza aggiornamento.
Quindi abbiamo tutti utilizzato siti Web in cui inserisci il tuo
nome utente,
ad esempio, e
si carica immediatamente senza dover verificare con il server Web,
oppure lo fai, inserisci una sorta
di stringa e fa una ricerca senza comunicare con un server
web o fa qualcosa senza comunicare con il server web.
Quindi, se sei in grado di iniettare
in quello, allora questa iniezione non verrà
convalidata, quindi verrà eseguita immediatamente e
ignorerà tutte le convalide.