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: 方法参数

关键方法说明

  1. dr_safe_filename方法 (位于dayrui/Fcms/Core/Helper.php)

    • 对特殊字符进行正则替换,防止目录穿越
    • 限制只能访问当前目录下的文件
  2. View类方法

    • V(): 返回View类实例
    • assign(): 处理传入数据,存入_options变量
    • display(): 显示模板,包含变量覆盖点

漏洞分析

漏洞入口点

漏洞位于dayrui/Core/Controllers/Api/Api.php第248行,通过GET参数控制三个关键参数。

漏洞触发流程

  1. 参数可控:通过GET方法传入namephpcmf_dir等参数
  2. 安全过滤:调用dr_safe_filename进行基本过滤
  3. 视图处理
    • 调用Service::V()获取View实例
    • 使用assign()方法处理可控参数
    • 开启输出缓冲(ob_start)
  4. 变量覆盖:在display()方法中使用extract()进行变量覆盖
  5. 模板文件解析:通过可控参数指定模板文件路径
  6. 命令执行:在解析api_related.html模板时,通过list_tag方法中的call_user_func_array实现RCE

关键利用点

  1. 变量覆盖:通过extract($_params, EXTR_OVERWRITE)覆盖重要变量
  2. 模板文件控制:通过namephpcmf_dir参数控制加载的模板文件
  3. 函数动态调用:利用list_tag方法中的call_user_func_array实现命令执行

漏洞复现

利用条件

  1. 目标系统使用存在漏洞的XunruiCMS版本
  2. 攻击者能够发送HTTP请求到目标系统

利用步骤

  1. 构造特殊请求访问API接口
  2. 通过参数控制模板文件加载
  3. 利用变量覆盖修改关键参数
  4. 触发命令执行

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: 关键利用参数

漏洞修复

官方在漏洞报告当天即发布了修复补丁,修复措施包括:

  1. 加强参数过滤
  2. 限制模板文件加载范围
  3. 修复变量覆盖问题

防御建议

  1. 及时更新到最新版本
  2. 对用户输入进行严格过滤
  3. 限制模板文件加载路径
  4. 避免使用危险的函数如extract()call_user_func_array()处理用户输入

总结

该漏洞展示了框架中模板解析机制的安全风险,特别是当结合变量覆盖和动态函数调用时,可能导致严重的远程代码执行漏洞。开发人员应特别注意此类设计模式的安全隐患,对用户输入保持高度警惕。

XunruiCMS 前台RCE漏洞分析与利用 漏洞概述 XunruiCMS某版本存在一个前台远程代码执行(RCE)漏洞,该漏洞允许攻击者通过精心构造的请求在服务器上执行任意命令。该漏洞源于模板文件解析过程中的不安全处理,结合变量覆盖和动态函数调用,导致命令执行。 前置知识 XunruiCMS路由机制 XunruiCMS采用以下路由格式: 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 : 关键利用参数 漏洞修复 官方在漏洞报告当天即发布了修复补丁,修复措施包括: 加强参数过滤 限制模板文件加载范围 修复变量覆盖问题 防御建议 及时更新到最新版本 对用户输入进行严格过滤 限制模板文件加载路径 避免使用危险的函数如 extract() 和 call_user_func_array() 处理用户输入 总结 该漏洞展示了框架中模板解析机制的安全风险,特别是当结合变量覆盖和动态函数调用时,可能导致严重的远程代码执行漏洞。开发人员应特别注意此类设计模式的安全隐患,对用户输入保持高度警惕。