真实复盘影子目录攻击——绕过WordPress固定链接劫持的手法

上个月我们接触到一个客户反馈的问题:网站打开一切正常,访客也看不出异常,但 Google 搜索结果里显示的却不是正常标题和摘要,而是赌场、博彩、药品之类的垃圾内容。

更离谱的是,这些内容没有出现在首页或文章页,而是出现在:About Us、Contact Us、Privacy Policy、Terms & Conditions等位置。

这些页面通常几年都不动一次,突然被污染,基本可以确定:不是普通的内容篡改,而是更隐蔽的"伪装型"攻击。

这就是我们这篇文章中要讲到的Shadow Directories(影子目录)------攻击者不改数据库、不动后台内容,而是利用服务器的目录优先级,直接劫持 WordPress 固定链接。

什么是 WordPress 固定链接(Permalink)?

WordPress 的固定链接,就是你文章或页面的"永久地址",例如:https://example.com/about-us/

它和早期那种硬编码链接(例如 ?p=103)区别很明显:

1.固定链接更易读、更利于 SEO

2.结构更稳定、可随设置调整

3.通常由 WordPress 的重写规则统一接管

重点是:在很多站点里,/about-us/ 这种路径并不是服务器上真实存在的文件夹,它只是"虚拟路径",最终仍交给 WordPress 的 index.php 来渲染页面。

我们一开始为什么查不到问题所在

客户使用的是Hostease的服务器,我们先检查了服务器相关安全设置,一切正常。然后按正常思路,又进 WP 后台看页面内容,无异常,查数据库 wp_posts,也没有问题,再看页面源代码:也没看到明显注入。

到这里就很难不让人怀疑,是不是Google抽风了?

直到我们试着把浏览器的 User-Agent 改成 Googlebot,再打开同一个 About Us 页面,原本正常的公司介绍,瞬间变成了完整的博彩垃圾页。

这时候就可以确定:

网站在"识别访问者身份",对搜索引擎展示垃圾内容,对普通用户展示正常内容。

这类行为通常被称为 Cloaking(伪装/障眼法)。

影子目录是怎么劫持固定链接的?

我们进入网站根目录后,发现了异常点:站点里居然出现了这些"真实目录":

/about-us/

/contact-us/

/privacy-policy/

注意:这些目录名,和 WordPress 固定链接一模一样。

正常情况下,一个标准 WordPress 站点不会在根目录创建这些页面同名文件夹。

但攻击者偏偏这么做了------这就是"影子目录"。

为什么创建同名目录就能劫持页面?

因为大多数服务器默认处理逻辑是:

1.如果路径对应一个真实目录/文件 → 直接优先返回它

2.如果不存在 → 才交给重写规则(WordPress)处理

于是当请求 https://example.com/about-us/ 时,服务器先看到"真实存在"的 /about-us/ 目录,直接执行该目录里的 index.php,WordPress 甚至都没机会接管请求。

你后台页面再干净、数据库再正常也没用------请求根本没走到 WordPress 那一层。

影子目录里都藏了什么?

每个影子目录里,我们都看到非常一致的三件套:

1.index.php:控制器(决定给谁看什么)

2.indexx.php:正常页面的"干净副本"

3.readme.txt:垃圾页面的完整源码(通常非常长)

它的工作逻辑很简单,但很阴:

当访问者像"搜索引擎爬虫"

index.php 识别到 UA(User-Agent)包含 Googlebot 等关键词 → 读取 readme.txt → 输出整页博彩垃圾内容,让搜索引擎收录。

当访问者像"人"

index.php 就 include indexx.php(正常页面的静态副本)→ 你看到的网站"完全正常"。

于是你会遇到最头疼的场景:你自己和用户看网站完全没有问题,但是搜索引擎看到的就是博彩网站。

这种攻击的危害:不是"挂马",而是"SEO 毒化"

影子目录攻击的目的通常不是勒索,也不是偷数据,而是利用你网站已有的权重在高信任页面(About/Contact 等)投放垃圾内容,让搜索引擎给它排名和流量,而你的网站则可能面临降权、索引污染、品牌信誉受损。更麻烦的是它能长期潜伏,因为你很难在日常访问中发现异常。

如何快速判断自己是否中招?

你可以用这几种方式自查:

1.Google 搜索结果出现博彩/药品/成人关键词,但站点正常

2.Search Console 里出现大量陌生页面/陌生摘要

3.用 curl 模拟 Googlebot 访问页面,内容不同

4.服务器根目录出现与固定链接同名的真实文件夹

5.同名文件夹里有 index.php + readme.txt 这种组合

我们是怎么修复的?(可直接照做)

第一步:删除影子目录

把所有与固定链接同名、你自己不认识的目录全部删除(连同里面的恶意文件)。

第二步:核对核心文件完整性

重点检查以下文件是否被篡改,是否有多余的include/外链:

index.php

.htaccess

wp-config.php

第三步:清理账户与权限

删除可疑管理员(尤其是叫 help / support / admin2 之类的)

检查文件权限,避免上传目录可执行 PHP

第四步:重置所有密码

WordPress和服务器相关的密码都进行重置,如WP 管理员密码、FTP/SFTP 密码、面板密码、数据库密码等,很多二次感染就是因为密码没改。

第五步:更新并做安全加固

更新 WP、主题、插件,安装 WAF(或安全插件 + 服务器层拦截),复查日志,找出首次入侵来源。

第六步:请求重新收录

清理完成后,建议在 Search Console 提交重新抓取与索引更新,尽快恢复搜索结果。

写在最后

这次案例最值得警惕的一点是:攻击者完全绕开 WordPress 本身,直接利用服务器规则"抢走路径解释权"。

所以安全排查别只盯着后台内容、数据库和插件,一定要把"文件系统"和"真实目录结构"也纳入日常检查。

相关推荐
WordPress学习笔记2 天前
米思齐WordPress
wordpress
Web极客码2 天前
如何获取WordPress 媒体文件的URL
内容运营·wordpress
Web极客码2 天前
解决WordPress迁移后重定向到旧域名的问题
数据库·wordpress·网站迁移
WordPress学习笔记6 天前
WordPress外贸建站 别搞多语言 贪多嚼不烂
大数据·人工智能·wordpress
gpldock2226 天前
Dentia - Dentist & Dental Clinic WordPress Theme Unlimited Sites
wordpress
今夕资源网6 天前
wordpress防止采集 防止火车头采集插件
wordpress·火车头·采集·wordpress火车头·防止·网站防采集·wordppress插件
gpldock2227 天前
Hotelhub - Hotel Booking WordPress Theme NULLED
运维·服务器·wordpress
今夕资源网7 天前
Bantu Image Fixer禁止 WordPress 生成缩略图,并将现有文章的特色图片替换回原图wordpress插件
插件·wordpress·缩略图·wordpress插件·wordpress缩略图
WordPress学习笔记8 天前
免费网站模板下载网站
wordpress