2014-03-27 58 views
1

前幾天我發現我被已在所有的index.php文件傳播惡意腳本入侵,的config.phpWP -config.php刪除<?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

所以你在代碼中發現了一些_malicious_。而不是設法保護您的文件,而是想繼續刪除它? –

+0

首先,你應該知道你的文件是如何被感染的,因爲如果你刪除了這些文件,這些文件會再次被重新感染。其次,您可能希望只備份數據庫,並且乾淨地安裝wordpress,它會更快,並且可能更乾淨,從而降低仍在「感染」的風險(即使有點) – aleation

+0

我試圖限制傷害。但在此期間,我試圖刪除在服務器上分散的數百個文件中發現的惡意代碼。 – Antonio

回答

0

那麼像

的preg_replace('/(\ < \?PHP的。+?)(ZXZhbChiYXNlNjRfZGVjb2RlKCJaWZXZhbChiYXNlNjRfZGVjb2RlKCJaW)(。+? \?>)/''',$ filesource);

應該這樣做,只要開啓和關閉php標籤是獨立的,即不包含任何你想保留的代碼。

請注意,preg_replace將不會將文件內容複製到變量中,然後將新字符串複製到$ cleansource變量中。

此外,您應該小心地在之前輸出字符串說明代碼已被替換,請謹慎對其進行更改

+0

感謝您的回覆。但是當我運行該腳本將會清除所有內容 – Antonio

+0

另一種方法就是在所有文件中保持不變的字符串,然後不刪除它們,而是將每個文件都放在一個數組中。然後添加單獨的標籤以捕獲越來越多的從開始的<?php標記到結束?>標記,直到獲取完整的字符串,請參閱http://www.php.net/manual/en/function.preg-match-all.php有關如何檢查preg_match_all()數組的示例。 – Hektor