###################################################### # AJAX # Spunti per la creazione di un worms in AJAX# ###################################################### by phoby Premessa: Questo articolo da qualche spunto, su come creare un worms avvalendosi di AJAX e di falle di tipo XSS, spiegato però su un vero portale,che spero venga patchato prima che io pubblichi l'articolo. AJAX verrà affrontato rapidamente, e solo la parte necessaria allo sviluppo di un semplice worm, se volete un buon tutorial consultate la bibliografia a fine pagina. L'articolo si basa su letture di articoli in lingua inglese, linkati a fine articolo, e anche su idee mie. Prerequisiti: basi di php,XML e sopratutto javascript INDICE: 1-CORSO RAPIDO DI AJAX 2-INTRODUZIONE 3-XSS - che cos'è? 4-DEVELOP 5-BIBLIOGRAFIA ]1[Corso rapido di AJAX] AJAX è una tecnologia che sta prendendo piede rapidamente e si basa sull'uso combinato di javascript lato client, un linguaggio di programmazione lato server e xml da tramite tra i due mondi. Il succo, in generale, consiste nel far mandare tramite javascript richieste al server, che risponderà in formato XML: javascript si occuperà di modificare la pagina a seconda dei dati che il server a mandato [e naturalmente a seconda di cosa gli abbiamo detto di fare], il tutto senza necessità di refreshare la pagina. Per metterci in comunicazione con il server si crea un oggetto di tipo XMLHttpRequest utilizzando questo codice che andrà bene per la maggior parte dei browser: _____________________________________________________________________ var xmlhttp; // Setup a variable. try { // This checks for alternate browsers such as Opera or Firefox xmlhttp = new XMLHttpRequest(); } catch (e) { // Oops, not one of those. Try different IE implementations. var XHR = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'); var success = false; for (var i=0;i < XHR.length && !success; i++) { try { xmlhttp = new ActiveXObject(XHR[i]); success = true; } catch (e) {} } if (!success) { throw new Error('No XHR object'); // No XMLHttpRequest object? Is this 1990? } } ______________________________________________________________________________________________________ Tramite l'oggetto xmlhttp ora possiamo inviare dati al server,ad esempio se volessimo inviare una variabile POST di nome "pino" settata al valore "ciao" alla pagina gianni.php : ______________________________________________________________________________________________________ var params="pino=ciao"; xmlhttp.open("POST", "gianni.php", true); //Il terzo parametro abilita il settaggio degli headers xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.setRequestHeader("Content-length", params.length); xmlhttp.setRequestHeader("Connection", "close"); xmlhttp.send(params); //Send the parameters to the target. ______________________________________________________________________________________________________ Bene..Ora abbiamo le basi per introdurre i concetti fondamentali del worm che andremo a creare! ]2[Introduzione] Nel codice che abbiamo visto abbiamo notato che possiamo collegarci ad un server, e mandare dati ad una pagina, bisogna però sottolineare che il nostro browser non ci permetterà di collegarci a siti esterni a quelli da cui è stato lanciato il codice javascript...ricordarevelo! Allora supponiamo di imbatterci in un sito che ci fa eseguire del codice javascript, che ci fa inviare dei dati a suo piacimento, può farlo? Certo ma solo all'interno del suo dominio...bene...avete idea di quanti siti ci sono sotto il dominio di www.myspace.com!!!! Ora il problema dovrebbe essere più chiaro.. Possiamo ad esempio mettere del codice javascript [in myspace non si può più] che spammi un link in tutti i blog di quel sottodominio, al semplice click di un link come questo: Non cliccare Ma la tecnica si affina utilizzando le oramai dilaganti XSS, falle che si trovano ovunque, che ora sfrutteremo per iniziare il nostro worm, se siete arrivati fin qui e avete capito tutto non avrete alcun problema. ]3[XSS] XSS sta per cross site scripting, io le ho imparate leggendo un ottima e semplice guida di KingOfSka [grande King] che trovate anch'essa nella bibliografia a fine pagina, io le spiego qui di seguito ma se non capite dategli una letta. Supponiamo di avere la seguene pagina php che chiamaremo bugged.php: ___________________________ ______________________________ Questa pagina non fa altro che mandarci quello che gli mandiamo tramite variabile GET. Supponendo che la pagina si trovi su www.ziopino.com, se scriviamo nel nostro browser www.ziopino.com/bugged.php?var1=stoimparandoascrivereunworminajax la pagina restituita dal server avra il seguente contenuto: stoimparandoascrivereunworminajax E se scrivessi nel browser: www.ziopino.com/bugged.php?var1= Succede che viene eseguito dal vostro browser del codice javascript! Una pagina così ovviamente non esiste....vi faccio un esempio un minimo più complesso che effettivamente serve per cercare le XSS, supponiamo la pagina bugged2.php redirect "; ?> se accediamo a questo indirizzo www.ziopino.com/bugged2.php?var=1 il server genererà questa pagina: redirect se diamo www.ziopino.com/bugged2.php?var=ciao avremo redirect MA SE DIAMO www.ziopino.com/bugged2.php?var=">okokredirect Per trovare un XSS io ti solito faccio così: 1-ABILITO TOR 2-INSERISCO IN TUTTI I FORM [TUTTI!!!] PAROLE TIPO "ASDFGHJ" 3-CERCO LA PAROLA NEI SORGENTI E RAGIONO... Firefox sicuramente è uno strumento validissimo ai nostri scopi, ci sono add-ons [se non sai cosa sono prendile come plug-in], tipo FIREBUG, molto comodo per capire il funzionamento di una pagina, monitorare lo stato del proprio DOM, vedere CSS, passaggio di variabili, inoltre il tastino per per abilitare/ disabilitare TOR, TumperData che vi permette di modificare le request in uscita a run-time...non continuo perchè ci vorrebbe un articolo o meglio un libro a parte!Insomma...Get Firefox! Tornando...questo tipo di XSS che abbiamo visto fin ora è di tipo non persistente, ovvero il codice non rimane salvato da nessuna parte, si tratta di un link malformattato ma non risiede su un server, e per essere sfruttato necessita che la vittima clicchi su un link "infetto". Sarebbe ottimale se riuscissimo a introdurre il nostro codice in maniera persistente...ad esempio in un blog, in questo caso potrebbe bastare l'apertura della pagina per l'esecuzione del nostro codice, oppure si può postare il link infetto da qualche parte, e questo link infetto una volta cliccato continua a rispammarsi da altre parti tramite il browser della vittima[sfruttando AJAX], vedendolo praticamente sarà molto più semplice di quanto sembri. ]4[DEVELOP] Non vi lascerò un codice definitivo e completo ma cenni e pezzi di codice, per evitare sensi di colpa. Procediamo... Ad esempio ho trovato una XSS non persistente su www.splinder.com, che trovate qui: http://www.xssed.com/mirror/308/ Andando a questo link verrà eseguito il codice tra i tag script: http://www.splinder.com/mysearch?query=okey%22%2F%253E%253Cscript%253Ealert%28%2522phoby%2522%29%3B% 253C%2Fscript%253E%2520%2520%2520%253Cinput%2520%3D%2522 Quei simboli strani sono la notazione esadecimale dei caratteri speciali tipo > < " etc., per ottenerli basta metterli normalmente nella barra degli indirizzi di firefox e li traduce in automatico. Il codice eseguito è questo: Potremmo mettere: