一段简单的URL,就能让攻击者读取你的数据库配置文件、获取明文密码、远程登录数据库,甚至拿下整台服务器——这就是PHPCMS V9版本中臭名昭著的任意文件读取漏洞(规则ID 3362)。今天咱们就来扒一扒这个漏洞有多危险,以及百度云防护WAF如何用内置规则轻松防住它。
一、 漏洞背景:PHPCMS的“陈年老洞”
PHPCMS作为国内曾经最流行的CMS系统之一,拥有庞大的用户基础。然而,其V9版本中存在一个严重的任意文件读取漏洞,影响范围涵盖V9到V9.15等多个版本 。该漏洞位于/index.php的搜索模块中,攻击者无需登录即可利用。
从百度云防护的控制台截图可以看到,其内置规则库中明确收录了该漏洞的防护规则:
| 规则名称 | 规则ID | 风险等级 | 防护类型 | 规则描述 |
|---|---|---|---|---|
| PHPCMS /phpsso_server/caches/configs/… | 3362 | 中风险 | 文件读取 | 拦截PHPCMS /phpsso_server/caches/configs/任意文件读取漏洞攻击行为。 |
这条规则的存在,意味着百度安全团队早已将这个漏洞纳入防护范围,用户无需任何配置即可获得保护。
二、 漏洞原理:一个参数引发的灾难
漏洞代码位置
问题出在phpcms/modules/search/index.php文件中的public_get_suggest_keyword函数 :
public function public_get_suggest_keyword() {
$url = $_GET['url'].'&q='.$_GET['q'];
$res = @file_get_contents($url);
if(CHARSET != 'gbk') {
$res = iconv('gbk', CHARSET, $res);
}
echo $res;
}
漏洞成因
这段代码的问题非常明显:直接将用户传入的$_GET['q']参数拼接到URL中,然后调用file_get_contents函数读取文件内容并输出 。攻击者可以通过../路径穿越符号,读取服务器上的任意文件。
攻击路径
攻击者只需构造如下URL :
http://目标网站/index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=../../phpsso_server/caches/configs/database.php
这个请求会做什么?
- 参数
q=../../phpsso_server/caches/configs/database.php试图跳出当前目录,读取敏感文件 file_get_contents函数被执行,读取指定的文件内容- 文件内容直接被输出到浏览器
结果:网站的数据库配置文件被完整暴露。
三、 漏洞危害:从文件读取到服务器沦陷
这个漏洞虽然被标记为“中风险”,但其实际危害远不止读取几个文件那么简单。攻击者可以利用它完成一整套攻击链:
第一步:读取数据库配置文件
PHPCMS的数据库配置文件位于/caches/configs/database.php ,其中包含:
array (
'hostname' => '数据库IP',
'database' => '数据库名',
'username' => '用户名',
'password' => '密码',
'tablepre' => 'v9_',
// ...
)
攻击者通过漏洞获取这些信息后,数据库的账号密码就完全暴露了。
第二步:远程连接数据库
如果数据库配置了远程访问(很多虚拟主机都开启了),攻击者可以直接用获取的账号密码远程连接数据库 :
mysql -u 用户名 -h 数据库IP -p
第三步:获取网站路径
攻击者可以通过读取/caches/error_log.php等文件获取网站物理路径 :
/index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=../../caches/error_log.php
第四步:写入Webshell
有了数据库权限和网站路径,攻击者可以尝试多种方式写入Webshell :
- 通过数据库备份功能写入一句话木马
- 修改模板文件插入恶意代码
- 利用后台功能上传文件
一旦成功,攻击者就获得了服务器的完全控制权,可以进行拖库、篡改网页、挖矿等恶意操作。
真实案例:乌云漏洞平台曾收录过利用此漏洞攻击湖南卫视旗下某站的案例,攻击者直接读取了数据库配置文件 。更有攻击者通过该漏洞成功拿下服务器,插入永久后门 。
四、 为什么传统防护很难防住?
- 路径编码绕过:攻击者可以使用
..\/、..%2f、双重编码等多种方式绕过简单的关键词过滤 。 - 业务复杂性:搜索功能本身需要读取外部资源,无法直接封禁所有文件读取操作。
- 漏洞变种多:除了
phpsso_server路径,攻击者还可能读取caches/configs、caches/error_log等多个敏感路径。
五、 百度云防护如何拦截?
5.1 内置规则,开箱即用
从截图可见,百度云防护WAF规则库中已明确包含针对PHPCMS任意文件读取漏洞的防护规则(规则ID 3362)。该规则基于百度安全团队对漏洞原理的深度分析,能精准识别攻击流量中的路径穿越特征。
5.2 规则工作原理
当攻击者发送类似../../phpsso_server/caches/configs/database.php的恶意请求时,WAF会在请求到达服务器之前进行多维度检测:
- 路径特征分析:识别
../、..\/、URL编码变体等路径穿越符号 - 敏感文件检测:匹配
database.php、config.php、error_log.php等敏感文件名 - 请求参数校验:分析
q、url等参数中是否包含恶意载荷
一旦命中规则,WAF立即返回403状态码阻断请求,攻击流量根本进不了你的业务层。
5.3 百度云防护的独特优势
百度云防护WAF不仅内置了这条规则,还具备以下能力 :
- 7×24小时威胁情报更新:百度安全团队持续监控全球漏洞信息,第一时间更新防护规则,覆盖0day漏洞。
- AI智能检测引擎:基于机器学习模型,能识别未知的攻击变种。
- JA3指纹精准识别:针对自动化扫描工具,即使换IP、改UA也能精准拦截。
- 套餐计费,用完即停:被攻击不会产生天价后付费账单。
六、 快速防护指南
如果你已经接入百度云防护
- 登录百度云防护控制台 → 【防护配置】→【Web防护】→【内置规则】
- 搜索规则ID 3362,确认状态为“开启”且动作为“拦截”
- (可选)在【自定义规则】中添加针对敏感路径的额外防护
如果你还没接入
立即联系主机吧,我们提供:
- 免费安全评估,检测你的网站是否存在PHPCMS漏洞
- 一键接入百度云防护,5分钟开启防护
- 专业配置指导,确保规则正确生效
七、 主机吧建议:别让老漏洞成为新隐患
PHPCMS任意文件读取漏洞虽然公布多年,但仍有大量网站未修复。自动化扫描工具每天都在全网搜索,发现漏洞就自动获取数据库密码,甚至植入后门。
对于还在运行PHPCMS的站长,我的建议是:
- 升级版本:升级到PHPCMS V9.16及以上版本,官方已修复此漏洞 。
- 限制数据库远程访问:在服务器防火墙中禁止数据库端口(3306)对外访问。
- 部署WAF:如果无法立即升级,部署百度云防护WAF是最快捷有效的临时防护方案。
从百度云防护的规则库可见,像PHPCMS这种历史漏洞,专业WAF早已内置规则。你不需要懂漏洞原理、不需要改代码,只要接入,就能获得防护。这正是专业安全产品的价值所在。
如果你还不确定自己的网站是否存在PHPCMS漏洞,或者想为服务器加上一道可靠的防线,欢迎联系主机吧。我们提供免费安全评估和配置指导,帮你把这个“老坑”填上。
主机吧 | 百度云防护官方合作伙伴
提供WAF接入、高防CDN、高防IP、高防服务器、SSL证书一站式服务
让每一次攻击都无功而返,让每一台服务器都固若金汤。


