本文实例总结了php网站被挂木马后的修复方法。分享给大家供大家参考。具体方法如下:
在linux中我们可以使用命令来搜查木马文件,到代码安装目录执行下面命令
find ./ -iname "*.php" | xargs grep -H -n "eval(base64_decode"
搜出来接近100条结果,这个结果列表很重要,木马都在里面,要一个一个文件打开验证是否是木马,如果是,马上删除掉
最后找到10个木马文件,存放在各种目录,都是php webshell,功能很齐全,用base64编码
如果你在windows中查找目录直接使用windows文件搜索就可以了,可以搜索eval或最近修改文件,然后如果是dedecms我们要查看最新dedecms漏洞呀然后修补。
下面给个php木马查找工具,直接放到你站点根目录
<?php<br />/**************PHP Web木马扫描器************************/<br />/* [+] 作者: alibaba */<br />/* [+] MSN: [email protected] */<br />/* [+] 首发: t00ls.net , 转载请注明t00ls */<br />/* [+] 版本: v1.0 */<br />/* [+] 功能: web版php木马扫描工具*/<br />/* [+] 注意: 扫描出来的文件并不一定就是后门, */<br />/* 请自行判断、审核、对比原文件。*/<br />/* 如果你不确定扫出来的文件是否为后门,*/<br />/* 欢迎你把该文件发给我进行分析。*/<br />/*******************************************************/<br />ob_start();<br />set_time_limit(0);<br />$username = "t00ls"; //设置用户名<br />$password = "t00ls"; //设置密码<br />$md5 = md5(md5($username).md5($password));<br />$version = "PHP Web木马扫描器v1.0";<br /> <br />PHP Web 木马扫描器<br />$realpath = realpath('./');<br />$selfpath = $_SERVER['PHP_SELF'];<br />$selfpath = substr($selfpath, 0, strrpos($selfpath,'/'));<br />define('REALPATH', str_replace('//','/',str_replace('\','/',substr($realpath, 0, strlen($realpath) - strlen($selfpath)))));<br />define('MYFILE', basename(__FILE__));<br />define('MYPATH', str_replace('\', '/', dirname(__FILE__)).'/');<br />define('MYFULLPATH', str_replace('\', '/', (__FILE__)));<br />define('HOST', "http://".$_SERVER['HTTP_HOST']);<br />?><br /><br /><br /><title></title><br /><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><br /><style><br />body{margin:0px;}<br />body,td{font: 12px Arial,Tahoma;line-height: 16px;}<br />a {color: #00f;text-decoration:underline;}<br />a:hover{color: #f00;text-decoration:none;}<br />.alt1 td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#f1f1f1;padding:5px 10px 5px 5px;}<br />.alt2 td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#f9f9f9;padding:5px 10px 5px 5px;}<br />.focus td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#ffffaa;padding:5px 10px 5px 5px;}<br />.head td{border-top:1px solid #fff;border-bottom:1px solid #ddd;background:#e9e9e9;padding:5px 10px 5px 5px;font-weight:bold;}<br />.head td span{font-weight:normal;}<br /></style><br /><br /><body><br /><?php<br />if(!(isset($_COOKIE['t00ls']) && $_COOKIE['t00ls'] == $md5) && !(isset($_POST['username']) && isset($_POST['password']) && (md5(md5($_POST['username']).md5($_POST['password']))==$md5)))<br />{<br />echo '用户名: 密码: ';<br />}<br />elseif(isset($_POST['username']) && isset($_POST['password']) && (md5(md5($_POST['username']).md5($_POST['password']))==$md5))<br />{<br />setcookie("t00ls", $md5, time()+60*60*24*365,"/");<br />echo "登陆成功!";<br />header( 'refresh: 1; url='.MYFILE.'?action=scan' );<br />exit();<br />}<br />else<br />{<br />setcookie("t00ls", $md5, time()+60*60*24*365,"/");<br />$setting = getSetting();<br />$action = isset($_GET['action'])?$_GET['action']:"";<br /> <br />if($action=="logout")<br />{<br />setcookie ("t00ls", "", time() - 3600);<br />Header("Location: ".MYFILE);<br />exit();<br />}<br />if($action=="download" && isset($_GET['file']) && trim($_GET['file'])!="")<br />{<br />$file = $_GET['file'];<br />ob_clean();<br />if (@file_exists($file)) {<br />header("Content-type: application/octet-stream");<br />header("Content-Disposition: filename="".basename($file).""");<br />echo file_get_contents($file);<br />}<br />exit();<br />}<br />?><br /><table border="0" cellpadding="0" cellspacing="0" width="100%"><br /><tbody><tr class="head"><br /><td><span style="float: right;font-weight:bold"></span></td><br /></tr><br /><tr class="alt1"><br /><td><span style="float: right"></span><br />扫描 |<br />设定 |<br />登出<br /></td><br /></tr><br /></tbody></table><br /><br><br /><?php<br />if($action=="setting")<br />{<br />if(isset($_POST['btnsetting']))<br />{<br />$Ssetting = array();<br />$Ssetting['user']=isset($_POST['checkuser'])?$_POST['checkuser']:"php | php? | phtml";<br />$Ssetting['all']=isset($_POST['checkall'])&&$_POST['checkall']=="on"?1:0;<br />$Ssetting['hta']=isset($_POST['checkhta'])&&$_POST['checkhta']=="on"?1:0;<br />setcookie("t00ls_s", base64_encode(serialize($Ssetting)), time()+60*60*24*365,"/");<br />echo "设置完成!";<br />header( 'refresh: 1; url='.MYFILE.'?action=setting' );<br />exit();<br />}<br />?><br /><br /><FIELDSET style="width:400px"><br /><LEGEND>扫描设定</LEGEND><br /><table width="100%" border="0" cellspacing="0" cellpadding="0"><br /><tr><br /><td width="60">文件后缀:</td><br /><td width="300"><input type="text" name="checkuser" id="checkuser" style="width:300px;" value=""></td><br /></tr><br /><tr><br /><td><label for="checkall">所有文件</label></td><br /><td><input type="checkbox" name="checkall" id="checkall" ></td><br /></tr><br /><tr><br /><td><label for="checkhta">设置文件</label></td><br /><td><input type="checkbox" name="checkhta" id="checkhta" ></td><br /></tr><br /><tr><br /><td> </td><br /><td><br /><br /></td><br /></tr><br /></table><br /></fieldset><br /><br /><?php<br />}<br />else<br />{<br />$dir = isset($_POST['path'])?$_POST['path']:MYPATH;<br />$dir = substr($dir,-1)!="/"?$dir."/":$dir;<br />?><br /><br /><table width="100%%" border="0" cellspacing="0" cellpadding="0"><br /><tr><br /><td width="35" style="vertical-align:middle;padding-left:5px">扫描路径:</td><br /><td width="690"><br /><input type="text" name="path" id="path" style="width:600px" value=""><br /> </td><br /></tr><br /></table><br /><br /><?php<br />if(isset($_POST['btnScan']))<br />{<br />$start=mktime();<br />$is_user = array();<br />$is_ext = "";<br />$list = "";<br /> <br />if(trim($setting['user'])!="")<br />{<br />$is_user = explode("|",$setting['user']);<br />if(count($is_user)>0)<br />{<br />foreach($is_user as $key=>$value)<br />$is_user[$key]=trim(str_replace("?","(.)",$value));<br />$is_ext = "(.".implode("($|.))|(.",$is_user)."($|.))";<br />}<br />}<br />if($setting['hta']==1)<br />{<br />$is_hta=1;<br />$is_ext = strlen($is_ext)>0?$is_ext."|":$is_ext;<br />$is_ext.="(^.htaccess$)";<br />}<br />if($setting['all']==1 || (strlen($is_ext)==0 && $setting['hta']==0)<em>8本文来源gao.dai.ma.com搞@代*码(网$</em><pre>搞代gaodaima码
)
{
$is_ext=”(.+)”;
}
$php_code = getCode();
if(!is_readable($dir))
$dir = MYPATH;
$count=$scanned=0;
scan($dir,$is_ext);
$end=mktime();
$spent = ($end – $start);
?>
扫描: 文件| 发现: 可疑文件| 耗时: 秒
No. | 文件 | 更新时间 | 原因 | 特征 | 动作 |
<?php
}
}
}
ob_flush();
?>
<?php
function scan($path = ‘.’,$is_ext){
global $php_code,$count,$scanned,$list;
$ignore = array(‘.’, ‘..’ );
$replace=array(” “,”n”,”r”,”t”);
$dh = @opendir( $path );