并非每一次 WordPress 被黑都很张扬。有些攻击者既不想篡改你的网站,也不想勒索。他们想悄悄劫持你域名的搜索权重,用它把自己的内容推上 Google 排名。这类攻击被称为 SEO 隐藏(cloaking)攻击,是商业网站可能遭受的最具破坏性的入侵之一,因为网站主往往根本不知道它正在发生。
本文将完整解剖一次真实的 SEO 隐藏攻击是如何运作的,取材自最近一起悉尼机构的案例——在一次取证审计中,每一个文件和每一个分发器都被识别了出来。如果你运营着一个 WordPress 网站,接下来所讲的,正是你应当学会识别的模式。
隐藏(cloaking)是什么意思
隐藏,是指向搜索引擎提供与向真人访客不同的内容。一个页面可能向 Googlebot 展示一篇塞满了无关商业主题关键词的长文,而向普通访客展示一个泛泛的落地页或一个跳转。其目的是欺骗搜索引擎,让被隐藏的内容借助一个既有域名的权重获得排名。
Google 有针对此的规则。隐藏违反站长指南,一旦被检测到,可能让域名遭到人工处置处罚,或排名全面崩塌。攻击者并不在乎,因为这个域名不是他们的。
五个目录的模式
这起悉尼案例采用了该攻击一个特别干净的版本。攻击者在网站根目录下创建了五个新目录,每个都以模仿一个真实的 WordPress 页面来命名。磁盘上出现了名为 about、contact、good-to-know、services 和 work 的文件夹。每个文件夹里恰好包含三个文件:一个分发器 index.php、一个 HTML 文件 user.php、一个 HTML 文件 wp-log.php。
把文件夹按真实页面命名的原因很简单。当网站上有一个针对 /about/ 的请求进来时,Web 服务器会先检查文件系统。存在一个名为 about 的文件夹,里面有一个 index.php。Web 服务器会在 WordPress 自身的 URL 路由介入之前就先解析到那个文件。对这些 URL 的每一个请求,都命中了攻击者的代码,而非合法的 WordPress 页面。
分发器
每个文件夹中的 index.php 文件都是一小段 PHP,只做一件事。它检查进入请求的 HTTP User-Agent 头,并据此进行分发。如果 User-Agent 包含 Googlebot、Googlebot-Mobile 或 Googlebot-News,它就提供 wp-log.php 的内容;否则就引入 user.php 并退出。
同一个文件被部署到全部五个文件夹中,逐字节完全相同。攻击者只用了一份载荷和一条判定规则,其余一切都只是数据。
面向 Googlebot 的载荷
wp-log.php 文件尽管扩展名是 .php,内容却是纯 HTML。它们体积巨大,从约 1.3 MB 到 4 MB 以上不等。每一个都是一整页外语 HTML 页面——本例中为印度尼西亚语——垃圾内容涵盖博彩、电子商务和三星产品追踪。这些页面塞满了结构化数据、内嵌的第三方追踪脚本,以及旨在就目标关键词压过合法内容的链接。
为什么叫它 wp-log.php?为了伪装。对一位随手扫一眼文件列表的网站主来说,它看起来像一个 WordPress 日志文件,而非可疑的载荷。
面向真人的载荷
user.php 文件是较小的 HTML 页面,提供给真正的真人访客。它们是来自无关第三方网站的门页(doorway page),同样以 .php 扩展名伪装,尽管其中根本不含任何 PHP 代码。任何从搜索结果点进这些 URL、或在网站上访问 /about/ 的人,看到的都是与这家机构毫不相干的内容。
这正是隐藏的部分。Google 在 wp-log.php 的内容里看到博彩垃圾,将其置于该机构的域名权重之下进行排名,同时把真实用户送往 user.php——一段截然不同的门页体验。这场欺骗对双方同时奏效。
攻击者是如何进来的
取证审计无法从现有数据中锁定确切的入侵路径,但最大的嫌疑是一个仍在安装并处于启用状态的过时文件管理器插件。相关的这一插件家族有着长期的远程代码执行漏洞历史,过去数年间发布过多项安全公告。凭借通过该插件获得的写入权限,攻击者可以把任意文件投放到文档根目录的任何位置。
关键在于,审计确认 WordPress 核心、wp-config.php、数据库和启用中的主题全都是干净的。应用中没有后门,没有恶意管理员用户,没有被混淆的 PHP eval。整个入侵完全存在于那五个文件夹里。这正是它如此悄无声息的原因。大多数安全扫描器查看的是 WordPress 文件,而非文档根目录中那些意料之外的目录。
为什么这类攻击如此具有破坏性
SEO 隐藏攻击从三个方面造成伤害。第一,垃圾内容被索引在你的域名之下,把你真正的页面挤到搜索结果的下方乃至之外。第二,Google 一旦检测到隐藏,可能施加人工处置处罚或算法降权,即便恶意文件被清除之后,往往也需要数周或数月才能恢复。第三,垃圾页面中内嵌的第三方脚本和追踪像素,可能让你的访客面临恶意软件或钓鱼的风险。
被隐藏攻击的网站主往往毫无察觉,直到流量崩塌,或有客户提到点击某条搜索结果时看到了奇怪的内容。到那时,数周或数月的损害已经造成。
如何在你自己的网站上检测它
几项快速检查就能抓住这类攻击的大多数变体。以普通用户身份访问你的首页。然后从一台服务器发起一个带 Googlebot User-Agent 头的 curl 请求并作对比。如果你看到不同的内容,那就出问题了。
在 Google Search Console 的”覆盖率”和”效果”报告中,查找你不认识的已索引 URL,尤其是那些带有外语查询的。通过 SFTP 查看文档根目录,找出你无法解释的文件夹或文件。用一款可靠的安全插件运行一次完整的恶意软件扫描,并去阅读报告,而不是只把告警清掉了事。
如何预防
预防依靠的是与防范大多数 WordPress 入侵相同的一套习惯。保持核心、主题、插件和 PHP 处于最新。移除你并不主动使用的插件,尤其是文件管理器和 shell 访问工具。在那些本不该包含 PHP 的目录中禁止 PHP 执行。每月审计一次文档根目录。使用一款会监控意料之外位置出现新文件、并在有新文件出现时发出告警的安全插件。
需要帮忙吗?
如果你担心自己的 WordPress 网站可能在你不知情的情况下托管着隐藏内容,Smart Coding 可以进行一次取证审计,准确告诉你服务器上到底有什么。如果你想要一个合作伙伴来确保你的域名只为它该有的内容获得排名,欢迎联系 Defyn 团队。



