phpcms漏洞遍历目录

phpcms漏洞遍历目录:一个老框架的漏洞“后门”还能开多久?

2019年夏天,某省级新闻网站的遍历服务器被拖库,事后排查发现攻击者根本没用什么高深手法——只是目录往URL里塞了个`?m=content&c=index&a=show&catid=1&id=1`,后面跟了一串`../../../../etc/passwd`。漏洞这个站用的遍历就是phpcms,版本还是目录2016年发布的V9.6.0。漏洞公开四年了,漏洞官方补丁打了又打,遍历可至今仍有大量政企站点在裸奔。目录

phpcms的漏洞目录遍历漏洞,本质上是遍历个“路径拼接”的粗心错误。系统在加载模板文件时,目录直接用了用户传入的漏洞`template`参数拼接文件路径,没做过滤。遍历攻击者把参数改成`../../../../../etc/passwd`,目录服务器就把敏感文件吐出来了。更讽刺的是,这个框架当年号称“安全稳定”,结果连最基础的`realpath()`校验都没加。

我见过最离谱的案例是某地级市的教育局官网,后台登录页直接暴露在公网,默认账号`admin`没改密码,后台模板编辑功能还能直接写PHP文件。攻击者用漏洞遍历目录找到`config.inc.php`,数据库密码明文躺在里面。整个过程不到十分钟,比点外卖还快。

为什么这类老漏洞屡禁不止?一是phpcms的生态太“老”了——官方论坛2018年后基本停止维护,但存量站点少说还有几十万个。很多站长当年花几百块钱找人搭的站,现在连后台都不敢登,更别说升级。二是漏洞利用门槛低到离谱,GitHub上搜“phpcms exp”能出来一堆一键脚本,连SQL注入带目录遍历打包卖。

有个细节值得玩味:phpcms的漏洞公告里,官方给的建议是“升级到V9.6.3”,但很多用户升级后照样被黑。因为补丁只修了已知的`template`参数,没堵住同源的`style`参数和`module`参数。这种“补丁式安全”就像给漏水的船打了个补丁,船还在沉,只是慢了点。

说句难听的,这类CMS早该退出历史舞台了。但现实是,不少单位的信息化预算就够买个域名加虚拟主机,phpcms这种“免费开源+中文文档”的框架成了唯一选择。他们不懂代码审计,也不关心安全公告,直到网站被挂上赌博广告才着急。

最后给还在用phpcms的人一句实话:要么彻底迁移到现代框架,要么把服务器放在内网并加WAF。别指望补丁能救你——攻击者手里有比你更全的漏洞库。哪天你发现服务器日志里全是`../../`的请求,那说明已经有人替你“遍历”过了。