CVE-2024-48180

本文最后更新于 2026年4月16日 下午

参考链接

阿里云漏洞库

NVD - CVE-2024-48180

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
2
3
function uploadExt() {
Return array('gif','jpg','jpeg','png','bmp','ico','blob','psd','webp','doc','docx','xls','xlsx','ppt','txt','zip','7z','gz','bz2','pdf','rar','tar','torrent','exe','apk','ipa','swf','flv','mp3','mp4','wav','wma','wmv','mid','avi','mpg','asf');
}

定位设置上传目录的路由/admin/?do=admin:column:editPost

/class/admin/column.php:admin_columneditPost()方法设置上传路径,没有限制,有权限即可

/class/cms/cms.php:cmsnowView()方法中通过include()包含模板文件来生成页面

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

只检测文件名中是否存在.php,是则返回这个文件,不是则在文件名末尾拼接.php,而模板文件的目录限制为/class/template

通过上传test.php.txt/class/template再包含这个文件生成页面访问达到rce

总结

漏洞根本原因是没有做上传目录的限制,导致目录可控+模板渲染功能文件名可控且没有做健全的文件上传防御。

修复建议:

  • 限制文件上传目录
  • 渲染时使用模板名而不是拼接成文件名传入

CVE-2024-48180
http://example.com/2024/12/19/CVE-2024-48180/
作者
J_0k3r
发布于
2024年12月19日
许可协议
BY J_0K3R