Magento致命错误:未找到类'Varien_Data_Collection_Filesystem'

Pun*_*ark 3 php magento

检查错误原因,将Filesystem.php文件重命名为Filesystem.php.suspected.手动将其重命名为Filesystem.php可以解决问题但每天我们需要手动重命名它,因为它经常被重命名为Filesystem.php.suspected.

我已经搜索了导致错误的原因但仍然没有运气.我很确定有一些东西正在重命名这个文件,但不知道从哪里开始,因为我对magento相当新.

Magento ver.1.9.1.1

Fac*_*dan 7

问题


基本上黑客在你的服务器上获得了他们的代码.您要么在不知情的情况下安装它,要么在您的服务器安全性中存在漏洞,让它们上传(甚至可能是PHP的cgi.fix_pathinfo问题).

.suspected文件扩展名是一件好事,因为它继续使用/滥用它不允许恶意代码.谢天谢地,您的服务器上运行了一个服务,可以为您检测到这一点.所以问题不是Filesystem.php,而是该文件被其他一些恶意文件滥用......你需要找到那个文件 - 可能还有文件.


如何解决它


首先,我要说没有"快速"解决方案.如果你的心脏打算抢救你的服务器,这就是这个过程.您将需要SSH访问您的服务器.

我的服务器设置Ubuntu的14.04LTS使用nginx的 Web服务器与exim4的电子邮件发送.如果您不使用这些相同的服务,请尝试Google以获取适合您的服务器环境的等效命令.

在我们开始之前:

[必须说明]:如果您复制粘贴此处列出的任何命令,请确保将" YOUR_USERNAME "之类的内容替换为对您的服务器环境有意义的值.

其他可能发生的坏事: 我发现黑客已经在我的服务器上获得了可执行代码,该代码创建了一个.php文件,作为接收HTTP POST请求的url端点.那些POST请求将触发黑客的脚本使用我的Exim4电子邮件服务器发送他们的电子邮件.检查我的Exim4电子邮件队列时,每周发送54,000封电子邮件.


让我们开始


检查他们是否滥用服务器的电子邮件发送

我使用以下命令检查并清除了我的Exim4邮件队列:

exim -bpc

exim -bp | exiqgrep -i | xargs exim -Mrm
Run Code Online (Sandbox Code Playgroud)

安装Magento SUPEE安全更新

Magento SUPEE安全补丁旨在纠正此远程可执行文件漏洞.在服务器上安装所有Magento SUPEE更新(最老到最小):

到这里下载它们:https: //www.magentocommerce.com/download

它们位于该页面底部的"下载" - >>"Magento Community Edition Patches"

有一个选择框供您选择与您的Magento版本相关的补丁.

您应该'下载1.9.1.0发布后发布的所有内容(2014年11月24日之后):

  • SUPEE-4829
  • SUPEE-5344
  • SUPEE-5994
  • SUPEE-6237
  • SUPEE-6285
  • SUPEE-6482

将所有下载的.sh补丁文件放入根Magento目录中.我的是:

/home/YOUR_USERNAME/www
Run Code Online (Sandbox Code Playgroud)

然后一次执行一个:

  • cd /home/YOUR_USERNAME/www
  • sh PATCH_SUPEE-4829_EE_1.14.1.0_v1-2015-02-10-07-57-21.sh
  • sh PATCH_SUPEE-5344_CE_1.8.0.0_v1-2015-02-10-08-10-38.sh
  • sh PATCH_SUPEE-5994_CE_1.6.0.0_v1-2015-05-15-04-34-46.sh
  • sh PATCH_SUPEE-6237_EE_1.14.2.0_v1-2015-06-18-05-24-23.sh
  • sh PATCH_SUPEE-6285_CE_1.9.1.1_v2-2015-07-08-08-07-43.sh
  • sh PATCH_SUPEE-6482_CE_1.9.2.0_v1-2015-08-03-06-51-10.sh

查找恶意文件


可能存在大量恶意文件.我找到了十几个,随着时间的推移,它们继续重新产生.

  • /home/YOUR_USERNAME/www/include.php
  • /home/YOUR_USERNAME/www/get.php
  • /home/YOUR_USERNAME/www/MY_OWN_NON-MAGENTO_FOLDER/class.php
  • /home/YOUR_USERNAME/www/media/system/system.php
  • /home/YOUR_USERNAME/www/media/system/mail.php
  • /home/YOUR_USERNAME/www/media/system/admin-infos.php
  • /home/YOUR_USERNAME/www/media/wysiwyg/MY_OWN_FOLDER/system37.php
  • /home/YOUR_USERNAME/www/media/captcha/admin/error44.php
  • /家庭/ YOUR_USERNAME/WWW/entreeBam/entreeBam/*

黑客必须遵循一系列事件才能让他们的文件像瑞士奶酪一样通过您的服务器传播.

基本上,他们需要一个起点.对我来说是'/home/YOUR_USERNAME/www/include.php'

为了找到那样的文件,我运行了这个命令:

egrep -RI 'function.*for.*strlen.*isset' /home/YOUR_USERNAME/www
Run Code Online (Sandbox Code Playgroud)

我知道黑客的脚本允许文件上传,并且所有文件上传都需要在PHP中使用move_uploaded_file().所以这个命令显示了大多数Magento的GOOD文件,但它也向我展示了一个糟糕的文件.那是' class.php ':

egrep -RI 'move_uploaded_file\(' /home/YOUR_USERNAME/www
Run Code Online (Sandbox Code Playgroud)

因此,在删除根目录和可能的其他目录中那些更明显的黑客访问点之后,您现在必须查看您可以找到哪些其他恶意文件.


检查Web服务器访问日志以查找对奇怪文件的POST请求

您的服务器根本不应该接收很多POST请求(如果有的话).因此,黑客基本上会为您绘制一个完美的路线图,直接指向您需要删除的文件.您需要做的就是检查'哪个'.php文件正在接收POST请求.如果他们的文件内容可疑,请删除它们.

提示:将POST请求发送到服务器的IP地址也可以帮助您确定文件是否可疑.如果您无法识别IP地址,则不应向您发出POST请求.


我正在使用nGinX作为我的网络服务器,因此请确保在/etc/nginx/nginx.conf文件中启用了access.log.当您知道您的nGinX access.log已填充时.使用此命令显示其中的所有POST请求:

egrep -RI 'POST' /var/log/nginx/access.log
Run Code Online (Sandbox Code Playgroud)

我发现帖子请求:

  • /media/system/system.php(显然不应该在媒体文件夹中)
  • /conns.php(有些经验告诉你这不是Magento文件)

删除文件后,access.log将开始显示每个POST请求的HTTP 404响应(不再是HTTP 200).那很好.这意味着黑客试图运行他们的脚本不起作用.最终,当黑客发现他们已经删除了所有收件人.php文件时,他们将停止发出POST请求.

要在访问日志中查看对POST请求有404个响应的文件:

egrep -RI "POST\s.*\.php(\s|&).*\s[4][0-9][0-9]\s" /var/log/nginx/access.log
Run Code Online (Sandbox Code Playgroud)

要在访问日志中查看对POST请求有200个响应的文件:

egrep -RI "POST\s.*\.php(\s|&).*\s[2][0-9][0-9]\s" /var/log/nginx/access.log
Run Code Online (Sandbox Code Playgroud)

使用此命令确保媒体文件夹中没有任何PHP文件:

find /home/YOUR_USERNAME/www/media/* -name "*\.php"
Run Code Online (Sandbox Code Playgroud)

查看文件内部,我可以看到一堆base-64编码的东西.没有合法的PHP脚本会由那么多base-64编码的东西组成.


找到所有恶意文件并删除它们后,您可以解决导致您看到的错误导致此问题发生的一个问题.


将Filesystem.php.suspected重命名为它应该是什么:

mv /home/YOUR_USERNAME/www/lib/Varien/Data/Collection/Filesystem.php.suspected /home/YOUR_USERNAME/www/lib/Varien/Data/Collection/Filesystem.php
Run Code Online (Sandbox Code Playgroud)

摘要


最重要的事情是:

首先,找到并删除原始访问点,'include.php'和(损坏的)'get.php'.这样黑客就无法继续在我的服务器上放置文件.

其次,继续检查我的Web服务器访问日志中的POST请求,从而导致我发现奇怪的文件.然后检查并删除这些文件.

最后,如果您保持推荐的Magento文件和文件夹权限并使您的服务器与最新的SUPEE更新保持同步,这将有所帮助.

对于娱乐,您可以运行此命令以查看由于此滥用行为而服务器的反恶意软件关闭了多少文件.其中一些是恶意文件 - 有些只是被滥用的好文件.

find /home/YOUR_USERNAME/www/* -name "*\.php.suspected"
Run Code Online (Sandbox Code Playgroud)