Apache/PHP root 漏洞

Apache/PHP root 漏洞

由于对上传文件的处理不安全,攻击者能够在我的服务器 (CentOS 5.4) 上运行 php 代码。此问题已修复,但当他连接时,他似乎修改了 root 拥有的文件 (文件权限 644),将其替换为 apache 用户拥有的文件。是否存在可以实现此目的的 apache 或 php 漏洞?

回应第一条要求提供更多信息的评论 - 如果攻击者能够将文件上传到我的服务器,并可能将用户引导到我域上的恶意内容,那么这已经够糟糕了。但是,他/她还能够编辑文件。结果就是我的网站被修改,以便将所有新用户注册信息通过电子邮件发送到 Gmail 地址。

我不知道从哪里开始查找,并请求帮助。除了明显的目录权限(不允许将文件上传到可能执行 php 代码的目录;不要在用户的上传目录中执行 php 代码)之外,我不知道该更改什么以确保这种情况不会再次发生。我的理解是,如果文件归 root 所有,则其他用户都无法更改它。显然事实并非如此。

如果这是您的服务器,您会查看哪里?

答案1

我的理解是,如果文件归 root 所有,则其他用户都无法更改它。显然事实并非如此。

如果该文件的权限可由“组”或“其他”写入,则该组中的任何人(例如“apache”)或任何用户(对于“其他”而言)都可以覆盖它和/或更改所有权。

由于这是文件注入,我要寻找的另一件事是不应该存在的 php 文件,或者您没有创建的文件。它们可能被命名为相对无害的名称,如“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' {} \;

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

答案2

关于如何在将来避免这种情况的一般提示:

修补您的服务器。CentOS 5.4 已经 EoL 很久了。我们目前使用的是 CentOS 5.7!

请注意,PHP 也进行了升级CentOS 5.5

此次 PHP 升级包含大量安全修复。

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

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

韋斯萊- 运行 httpd-sub 进程的用户,集团www

管理员- 对网络服务器文件(通常是 htdocs 或你的情况是 php-base-dir)有写权限的用户,集团www

集团www应该具有对 htdocs 的读取权限,但没有写入权限。

随意选择您自己的用户/组名,这只是一个示例。

您还可以通过禁止 TRACE、TRACK、PUT 和 DELETE(如果您的应用程序允许)来强化 httpd。这可以通过以下方式实现mod_rewrite

相关内容