3

クライアントのサーバーの1つにある何千ものファイルに感染したウイルスがあります。

幸いなことに、私はこの男のサーバーで他の多くのマルウェアを処理しましたが、これは簡単な正規表現を実行するのが簡単に見えます(彼はすべてのWebサイトを同じアカウントに配置しました:(しかし私は彼と協力してそれを解決しています)。

基本的には、GOODコードを閉じる前にphpを挿入するほとんどのマルウェアとは異なり(良いコード/悪いコードを判断するのが非常に困難になります)、この現在のマルウェアは常に新しいを追加します<?php ... malware ... ?>

したがって、基本的に、ここに適切なコードがあると言います。

<?php
require('./wp-blog-header.php'); 
?>

requireステートメントの直後で?>の前にある種のbase64_decodeevalを追加する代わりに(ページが条件付き/複雑なステートメントで終了した場合に削除が困難になる可能性があります)、これは常に次のコードを次の<?php ... ?>ようなNEWで追加します:

<?php
require('./wp-blog-header.php'); 
?><?php ... malware ...?>

ここに悪意のあるコードを配置したくありませんが、これが悪意のあるコードが常に開始する方法です。

<?php @error_reporting(0); if (!isset($eva1fYlbakBcVSir)) {$eva1fYlbakBcVSir = "tons and tons of characters";$eva1tYlbakBcVSir = "\x6335\1443\3x6f\1534\x70\170\x65";$SNIPSNIPSNIPSNIP;} ?>

すべてのファイルを検索したいのですが<?php @error_reporting(0); if (!isset、それがページの最後のPHPステートメントである場合は、

4

2 に答える 2

12

純粋な php を使用してプロジェクト全体をクリーンアップする方法は次のとおりです。

いかなる点においても、提供されたコードの使用に起因する、またはそれに関連する直接的、間接的、特別、または必然的な損害を含むがこれらに限定されない、いかなる損害についても責任を負わないものとします。保証、契約、不法行為、またはその他の場合。傷害が人または物またはその他によって被ったかどうか。また、このコードを使用した結果、損失が発生したかどうか。;p

<?php 
//Enter it as it is and escape any single quotes
$find='<?php @error_reporting(0); if (!isset($eva1fYlbakBcVSir)) {$eva1fYlbakBcVSir =\'\';?>';

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);
                        $pos = strpos($filesource, $find);
                        if ($pos === false) {
                            continue;
                        } else {
                        //The cleaning bit
                        echo "The string '".htmlentities($find)."' was found in the file '$path/$file and exists at position $pos and has been removed from the source file.<br />";
                        $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;
}
?>

幸運を。

更新 (正規表現を使用):

<?php 
error_reporting(E_ALL);
$find='<\?php @error_reporting\(0\); if \(!isset\((.*?)\?>';

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;
}
?>
于 2012-05-02T22:46:31.387 に答える
1

これまでのところ、これが最も近いです(mvdsに感謝します)

sed -e "s/<?php @error_reporting.*?>//g" --in-place=_cleaned *

--in-place=_cleaned はエラーを出していますがsed: illegal option -- -

于 2012-05-02T22:43:30.980 に答える