Apache / PHP根漏洞利用

由于处理上传的文件不安全,攻击者能够在我的服务器(CentOS 5.4)上运行php代码。这个问题已经得到解决,但是当他连接时,他似乎已经修改了一个由root拥有的文件(文件权限644 ),取而代之的是由apache用户拥有的。 有没有Apache或PHP漏洞可以启用这个?

为了响应请求更多信息的第一条评论 – 攻击者能够将file upload到我的服务器,并可能将用户发送到我的域中的恶意内容,这已经足够糟糕了。 但是,他/她也能够编辑文件。 这样做的结果是,我的网站被修改,把新用户注册的所有信息通过电子邮件发送到Gmail地址。

我不知道从哪里开始寻找,并正在请求帮助。 除了明显的目录权限(不允许file upload到php代码可能执行的目录;不要在用户的上传目录中执行php代码)我不知道要改变什么,以确保不会再发生。 这是我的理解,如果一个文件是由拥有,没有其他用户可以改变它。 显然这不是事实。

如果是你的服务器,你会在哪里看?

这是我的理解,如果一个文件是由根拥有,没有其他用户可以改变它。 显然这不是事实。

如果这个文件的权限可以通过“group”或者“other”写入,那么与该组中的任何人(比如“apache”)或者任何用户(在“其他”的情况下)都可以覆盖和/或改变所有权。

另一件事我会寻找,因为这是一个文件注入,是不应该在那里的PHP文件,或者你没有创build的文件。 他们可以被命名为“index.php”或“help.php”等相对良性的东西,但是如果你看一下代码,你会看到大量的base64编码数据(以掩饰它实际正在做什么)。 也请看“wsh.php”。

有时这些文件是用PHP编写的“web shell”,它使用php / apache进程的权限,提供对文件系统的shell访问。 他们将能够编辑/删除/上传/复制/移动文件,其中包括已被root拥有但拥有不良权限的文件(请参阅第一段)。

这些文件可能如下所示:

<?PHP //Authentication $login = ""; //Login $pass = ""; //Pass $md5_pass = ""; //If no pass then hash eval(gzinflate(base64_decode('7b17f9vG0TD6d/v75TusEaYmE5KiZOcmWXJkSY59alt+JLlpXtmH // etc etc 

也许你可以做这样的事情:

 find www_root -name '*.php' -exec grep -l 'eval' {} \; 

看看这些文件,并确保它们是合法的。

只是在将来如何避免这种情况的普遍提示:

修补您的服务器。 CentOS 5.4现在已经很久了。 我们目前在CentOS 5.7!

请注意,在CentOS 5.5中也有PHP的升级。

这个PHP升级包含了很多安全修复程序。

对于Web服务器,您应该使用(至less)三个用户和一个组:

root – 主进程的所有者(如果使用非特权端口则不需要)

wwwrun – 运行httpd-sub-processes的用户, 组www

wwwadmin – 具有对Web服务器文件的写入访问权的用户(通常是htdocs或者在你的情况下是php-base-dir),还有www

组www应该已经读取,但不能写访问htdocs。

随意select你自己的用户/组名,这只是一个例子。

您也可以通过禁止TRACE,TRACK,PUT和DELETE(如果您的应用程序允许)加固httpd。 这可以通过mod_rewrite来实现。