帝国CMS的帝国渗透测试,说白了就是渗试报跟它内部那套模板引擎和变量覆盖漏洞较劲。这套系统在2018年之前的透测老站里存量极大,很多站长从装上就没再升级过,帝国导致一些陈年漏洞至今仍能轻松打穿。渗试报
测试第一步,透测先看版本号。帝国帝国CMS的渗试报版本信息藏在后台登录页的HTML注释里,或者直接访问/e/class/connect.php看报错信息。透测多数情况下,帝国目标站点还停留在7.0或7.2版本,渗试报而官方早在2019年就修复了核心的透测SQL注入漏洞——但前提是站长愿意动那一下“在线更新”按钮。我见过太多案例,帝国后台明明提示有更新包,渗试报管理员硬是透测视而不见,理由无非是“怕改坏模板”或“懒得备份数据库”。
真正有意思的是e/action/ListInfo.php这个文件。它接收的mid参数存在整数型注入,但前提是magic_quotes_gpc没开。老版本PHP环境里这开关默认是开的,可很多虚拟主机为了兼容老程序,反而把它关了。实测中,用and 1=2 union select配合burp的fuzz字典,三分钟就能拖出管理员账号的md5哈希——前提是目标没装安全狗或云锁这类东西。
模板注入是另一个突破口。帝国CMS的标签语法[!--news.url--]这类变量,如果能在会员中心的自定义字段里插入恶意代码,配合后台“模板管理”的解析机制,就能实现任意文件写入。有次测试一个地方门户站,对方在“房产频道”的列表模板里嵌了个第三方统计代码,我顺着那个位置试了试,发现$_POST['tempid']参数直接拼进了文件路径,连目录穿越都不用做,直接写了个PHP一句话木马到/e/template/下。
别忽略后台的“数据备份与恢复”功能。这个功能设计得极其危险:备份文件名是时间戳加随机数,但恢复时只校验文件名是否以.sql结尾,不校验文件内容是否包含恶意PHP代码。更绝的是,备份目录/e/admin/ebak/默认无执行权限,但如果你能先通过其他漏洞上传一个.htaccess文件,就能让这个目录里的PHP文件被解析。组合拳打下来,后台权限直接变成服务器权限。
说个具体的。去年测一个纺织行业B2B站,对方用的是帝国CMS 7.5版本,服务器是Windows Server 2012。我利用/e/member/class/member_act.php里的cookie伪造漏洞,把userid改成1,groupid改成1,成功以管理员身份进入后台。但真正让我意外的是,后台的“系统设置-参数设置”里居然有个phpenv选项,可以切换PHP版本——我把它从5.4切到7.3,结果站点直接白屏,因为老代码里用了大量mysql_*函数。这一下反而暴露了服务器上装了多版本PHP,顺着这个信息查到了宝塔面板的默认端口,弱口令试了三次就进去了。
这类系统还有个通病:上传功能对文件头校验不严。在/e/class/upload.php里,只检查了$_FILES['file']['type'],这个值完全由客户端控制。我常把一张正常图片的十六进制头FF D8 FF E0拼在PHP代码前面,后缀改成.jpg,上传后配合解析漏洞就能执行。但帝国CMS的/e/目录下默认没有Nginx的cgi.fix_pathinfo配置,所以这招在Apache上成功率更高。
最后提醒一句:渗透测试报告别光罗列漏洞清单,得写清楚每个漏洞的触发条件、利用链和影响范围。比如那个ListInfo.php的注入,如果目标数据库是MySQL 5.7以上且开了secure_file_priv,那就没法用into outfile写文件——这细节不写进报告,客户复测时可能白忙活一场。