######################################################
# 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:
___________________________
//prelevo la variabile GET
$var=$_GET['var1'];
echo $var;
?>
______________________________
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
$var=$_GET['var'];
echo "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: