删除<! - ?php ***? - >包含特定文本的行

时间:2014-03-27 12:41:28

标签: php malware

几天前,我发现我被所有 index.php 文件, config.php wp中的恶意脚本入侵了-config.php

我尝试获取代码并对其进行修改以查找包含此脚本的文件夹中的文件并自动将其删除。

不幸的是我没有成功。

代码开头如下:

<?php  $J24fj = 'bH1Vrb2sswS7fUn8HyCx.... AND MUCH MORE ?>

此代码始终在变化,但内部有一个常量:此文本:ZXZhbChiYXNlNjRfZGVjb2RlKCJaW

我找到了这段代码,如何更改它以搜索常量并删除整行<?php ******* ?>

<?php 
$find='ZXZhbChiYXNlNjRfZGVjb2RlKCJaW';

echo findString('./',$find);

function findString($path,$find){
    $return='';
    ob_start();
    if ($handle = opendir($path)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                if(is_dir($path.'/'.$file)){
                    $sub=findString($path.'/'.$file,$find);
                    if(isset($sub)){
                        echo $sub.PHP_EOL;
                    }
                }else{
                    $ext=substr(strtolower($file),-3);
                    if($ext=='php'){

                        $filesource=file_get_contents($path.'/'.$file);
                        //The cleaning bit
                        echo "The string '".htmlentities($find)."' was found in the file '$path/$file and has been removed from the source file.<br />";
                        $clean_source = preg_replace('#'.$find.'#','',$filesource);
                        // $clean_source = str_replace($find,'',$filesource);
                        file_put_contents($path.'/'.$file,$clean_source);
                    }else{
                        continue;
                    }
                }
            }
        }
        closedir($handle);
    }
    $return = ob_get_contents();
    ob_end_clean();
    return $return;
}
?>

提前致谢

安东尼奥

1 个答案:

答案 0 :(得分:0)

好像

preg_replace(&#39; /(\&lt; \?php。+?)(ZXZhbChiYXNlNjRfZGVjb2RlKCJaWZXZhbChiYXNlNjRfZGVjb2RlKCJaW)(。+?\?&gt;)/&#39;&#39;&#39;,$ filesource) ;

如果开放和关闭的php标签是自包含的,那么

应该可以做到这一点,即不要包含你想保留的任何代码。

请注意,preg_replace可以在不将文件的内容复制到变量中,然后将新字符串复制到$ cleansource变量中。

另外,在输出一个字符串表示代码已被替换之前,您应该小心进行的更改!