Guida alle XSS by KingOfSka - Contro Potere Crew - http://contropotere.altervista.org 25/10/2005 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 [quote=http://it.wikipedia.org/wiki/Javascript] 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. [/quote] #2:. XSS 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: 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=ciao" , così vedrete "ciao" scritto in grassetto, per il tag "" che abbiamo usato.. e infine fate ""http://127.0.0.1/xss.php?message=" 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: Ed ora lo script che salva i dati del cookie: 404 Not Found

Not Found

The requested URL was not found on this server.

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: 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: 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 :D 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: http://contropotere.altervista.org/mercury/index.php?a=topic&t=184 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: http://it.php.net/htmlentities http://it.php.net/preg_replace 5:. Links http://contropotere.altervista.org - Sito della Crew http://www.php.net - Sito ufficiale di Php , molto utile per le spiegazioni di ogni funzione http://www.owasp.org - Open Web Application Security Project , un sito con lo scopo di aiutare a rendere più sicuri i nostri siti web, molto utile. http://livehttpheaders.mozdev.org - 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: http://contropotere.altervista.org KingOfSka ¡¡¡ Zapata Vive La Lucha Sigue!!!