唐磊的个人博客

博客入侵解决方案

前面谈到主机被入侵,博客被注入恶意代码,开始还想到等客服那边行动帮忙恢复,折腾了一周多,结果最后还是自己动手,丰衣足食。因此该主机所在的博客等站点被浏览器拦截了一周多,今天恢复了。下面说下解决方案。

其实也就是用之前提到的思路,写个脚本删除所有php文件中的恶意代码。主机提供商没有备份没办法恢复被感染前的代码。

思路就是:那段恶意代码提取出来保存在一个文件里面,例如malCode.txt,从根目录递归找出所有php文件,如果该php文件被感染即含有malCode.txt中的内容,则删除这段代码,并保存。具体而言有delMalwareCode.php:

/*
* Created on 2012-7-5 @author: tanglei|www.tanglei.name
*/
global $malwareCodeFile, $malCodeSize,$malwareCode;
//$malwareCodeFile = "S:/MYSITE/malCode.txt"; //本地测试用
$malwareCodeFile = "/home/username/public_html/malCode.txt";//上传至主机
$malwareCode=file_get_contents($malwareCodeFile);
$malCodeSize = filesize($malwareCodeFile);//7317;
//$dir = "S:/MYSITE";
$dir = "/home/username/public_html";//从'根'目录开始
tree($dir);
function tree($dir)
{
$handle = @opendir($dir) or die("Cannot open " . $dir);
//echo "Files in " . $dir . ":\n";
while($file = readdir($handle))
{
if ($file == "." || $file == "..") continue;
if (is_dir($dir.'/'.$file))
{
tree($dir.'/'.$file);//递归找出所有php文件
}
if (substr($file,-4) == '.php')
delCode($dir.'/'.$file);//处理每个php文件
}
}
//delCode('S:/MYSITE/wp-config-sample.php');//单个文件本机测试用
function delCode($filename)
{
echo 'del code :'."\t".$filename."\n";//log下处理了哪些文件
global $malCodeSize,$malwareCode;
$fHandle = fopen($filename,'r+');
$srccontent = fread($fHandle,$malCodeSize);
if ($srccontent == $malwareCode)//读取malCode那么大小的内容与恶意代码比较
{
fseek($fHandle, $malCodeSize);
$content = fread($fHandle,filesize($filename)-$malCodeSize);//中招了,正常代码应该是从恶意代码之后到文件结束
fclose($fHandle);
$fHandle = fopen($filename,'w');
fwrite($fHandle,$content);
fclose($fHandle);
}else{
fclose($fHandle);
}
}

以上代码就完成了删除恶意代码的需求。然后SSH到主机执行一下即可:

php delMalwareCode.php >del.log

,悲催的是主机提供商居然说因为中招了所以把SSH都给关掉了。那就把写好的代码通过ftp上传至指定目录,让客服执行吧。

这一步完成之后,还没完,要想关闭chrome等的拦截,还得手动去重新提交网站,申请审核

以后得注意点吧,什么插件啊之类尽量更新下,防止被注入啊等等,还有密码之类的。

tanglei wechat
欢迎扫描二维码关注我的微信公众号