xunruicms某版本前台RCE
字数 1449 2025-08-07 08:22:05
XunruiCMS 前台RCE漏洞分析与利用
漏洞概述
XunruiCMS某版本存在一个前台远程代码执行(RCE)漏洞,该漏洞允许攻击者通过精心构造的请求在服务器上执行任意命令。该漏洞源于模板文件解析过程中的不安全处理,结合变量覆盖和动态函数调用,导致命令执行。
前置知识
XunruiCMS路由机制
XunruiCMS采用以下路由格式:
/index.php?s=xxx&c=xxx&m=xxx
s: 模块参数c: 控制器参数m: 方法参数
关键方法说明
-
dr_safe_filename方法 (位于
dayrui/Fcms/Core/Helper.php)- 对特殊字符进行正则替换,防止目录穿越
- 限制只能访问当前目录下的文件
-
View类方法
V(): 返回View类实例assign(): 处理传入数据,存入_options变量display(): 显示模板,包含变量覆盖点
漏洞分析
漏洞入口点
漏洞位于dayrui/Core/Controllers/Api/Api.php第248行,通过GET参数控制三个关键参数。
漏洞触发流程
- 参数可控:通过GET方法传入
name、phpcmf_dir等参数 - 安全过滤:调用
dr_safe_filename进行基本过滤 - 视图处理:
- 调用
Service::V()获取View实例 - 使用
assign()方法处理可控参数 - 开启输出缓冲(
ob_start)
- 调用
- 变量覆盖:在
display()方法中使用extract()进行变量覆盖 - 模板文件解析:通过可控参数指定模板文件路径
- 命令执行:在解析
api_related.html模板时,通过list_tag方法中的call_user_func_array实现RCE
关键利用点
- 变量覆盖:通过
extract($_params, EXTR_OVERWRITE)覆盖重要变量 - 模板文件控制:通过
name和phpcmf_dir参数控制加载的模板文件 - 函数动态调用:利用
list_tag方法中的call_user_func_array实现命令执行
漏洞复现
利用条件
- 目标系统使用存在漏洞的XunruiCMS版本
- 攻击者能够发送HTTP请求到目标系统
利用步骤
- 构造特殊请求访问API接口
- 通过参数控制模板文件加载
- 利用变量覆盖修改关键参数
- 触发命令执行
POC (Proof of Concept)
?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=system%20param0=calc.exe
参数说明:
s=api: 指定模块c=api: 指定控制器m=template: 指定方法app=admin: 指定应用name=api_related.html: 指定模板文件phpcmf_dir=admin: 控制目录路径mid=%20action=function%20name=system%20param0=calc.exe: 关键利用参数
漏洞修复
官方在漏洞报告当天即发布了修复补丁,修复措施包括:
- 加强参数过滤
- 限制模板文件加载范围
- 修复变量覆盖问题
防御建议
- 及时更新到最新版本
- 对用户输入进行严格过滤
- 限制模板文件加载路径
- 避免使用危险的函数如
extract()和call_user_func_array()处理用户输入
总结
该漏洞展示了框架中模板解析机制的安全风险,特别是当结合变量覆盖和动态函数调用时,可能导致严重的远程代码执行漏洞。开发人员应特别注意此类设计模式的安全隐患,对用户输入保持高度警惕。