YzmCMS 5.4 后台getshell
字数 1321 2025-08-26 22:11:57

YzmCMS 5.4 后台Getshell漏洞分析与利用

漏洞概述

YzmCMS 5.4版本存在两个后台getshell漏洞,攻击者可以通过管理员权限在系统中执行任意代码。这两个漏洞分别是:

  1. 缓存文件写入漏洞
  2. 配置文件修改漏洞

漏洞一:缓存文件写入漏洞

漏洞位置

yzmphp/core/class/cache_file.class.php 文件中的 _fileputcontents 函数

漏洞分析

  1. 补丁在原先的 $contents 前拼接了 <?php exit('NO.'); ?>\n,如果要进入序列化代码,需要 $this->config['mode'] 为1

  2. 调用链:

    • setcache() 函数 (yzmphp/core/function/global.func.php)
    • cache_factory::get_instance()->get_cache_instances()->set()
    • _fileputcontents()
  3. 关键点:

    • 文件名由第一个参数决定(后缀为.php)
    • 文件内容由第二个参数决定
    • 默认配置下 mode 为2不可利用,需要修改为1

利用条件

  1. 管理员权限(默认账号密码:yzmcms/yzmcms)
  2. 需要修改配置文件 common/config/config.php 中的 mode 为1

利用步骤

  1. 修改配置文件:

    'file_config' => array (
      'cache_dir' => YZMPHP_PATH.'cache/chche_file/',
      'suffix' => '.cache.php',
      'mode' => '1', // 修改此处为1
    ),
    
  2. 登录后台,访问系统管理 > 自定义配置

  3. 添加配置,在配置值中写入PHP代码

  4. 代码将写入 cache/chche_file/configs.cache.php 文件

漏洞二:配置文件修改漏洞

漏洞位置

application/admin/common/function/function.php 中的 set_config 函数

漏洞分析

  1. 补丁增加了对 $config,$ 的移除
  2. 通过特定正则表达式替换配置文件内容
  3. 可利用 $1 闭合单引号注入代码
  4. 过滤了 > 但可以使用 array(0=>1,func()) 形式执行函数

利用条件

  1. 管理员权限(默认账号密码:yzmcms/yzmcms)
  2. 无需修改配置文件

利用步骤

  1. 构造payload:

    $1,eval(base64_decode($1c3lzdGVtKCdlY2hvIDEyMycpOw==$1)),$1
    

    其中 c3lzdGVtKCdlY2hvIDEyMycpOw==system('echo 123'); 的base64编码

  2. 登录后台,访问系统管理 > 系统设置 > 附加设置

  3. 在"水印图片名称"字段中填入payload并提交

  4. 代码将被写入 common/config/config.php 并执行

漏洞修复

  1. 缓存文件写入漏洞修复:

    • _fileputcontents 函数中添加了退出代码
    • 建议保持 mode 为2的默认配置
  2. 配置文件修改漏洞修复:

    • 过滤了 ,$ 字符
    • 建议对配置值进行更严格的过滤

总结

这两个漏洞都需要管理员权限,但利用难度较低:

  1. 缓存文件写入漏洞需要修改配置文件
  2. 配置文件修改漏洞可直接利用,更为实用
  3. 默认密码增加了漏洞利用的可能性

建议用户:

  1. 升级到最新版本
  2. 修改默认管理员密码
  3. 限制后台访问权限
YzmCMS 5.4 后台Getshell漏洞分析与利用 漏洞概述 YzmCMS 5.4版本存在两个后台getshell漏洞,攻击者可以通过管理员权限在系统中执行任意代码。这两个漏洞分别是: 缓存文件写入漏洞 配置文件修改漏洞 漏洞一:缓存文件写入漏洞 漏洞位置 yzmphp/core/class/cache_file.class.php 文件中的 _fileputcontents 函数 漏洞分析 补丁在原先的 $contents 前拼接了 <?php exit('NO.'); ?>\n ,如果要进入序列化代码,需要 $this->config['mode'] 为1 调用链: setcache() 函数 ( yzmphp/core/function/global.func.php ) cache_factory::get_instance()->get_cache_instances()->set() _fileputcontents() 关键点: 文件名由第一个参数决定(后缀为.php) 文件内容由第二个参数决定 默认配置下 mode 为2不可利用,需要修改为1 利用条件 管理员权限(默认账号密码:yzmcms/yzmcms) 需要修改配置文件 common/config/config.php 中的 mode 为1 利用步骤 修改配置文件: 登录后台,访问系统管理 > 自定义配置 添加配置,在配置值中写入PHP代码 代码将写入 cache/chche_file/configs.cache.php 文件 漏洞二:配置文件修改漏洞 漏洞位置 application/admin/common/function/function.php 中的 set_config 函数 漏洞分析 补丁增加了对 $config 中 , 和 $ 的移除 通过特定正则表达式替换配置文件内容 可利用 $1 闭合单引号注入代码 过滤了 > 但可以使用 array(0=>1,func()) 形式执行函数 利用条件 管理员权限(默认账号密码:yzmcms/yzmcms) 无需修改配置文件 利用步骤 构造payload: 其中 c3lzdGVtKCdlY2hvIDEyMycpOw== 是 system('echo 123'); 的base64编码 登录后台,访问系统管理 > 系统设置 > 附加设置 在"水印图片名称"字段中填入payload并提交 代码将被写入 common/config/config.php 并执行 漏洞修复 缓存文件写入漏洞修复: 在 _fileputcontents 函数中添加了退出代码 建议保持 mode 为2的默认配置 配置文件修改漏洞修复: 过滤了 , 和 $ 字符 建议对配置值进行更严格的过滤 总结 这两个漏洞都需要管理员权限,但利用难度较低: 缓存文件写入漏洞需要修改配置文件 配置文件修改漏洞可直接利用,更为实用 默认密码增加了漏洞利用的可能性 建议用户: 升级到最新版本 修改默认管理员密码 限制后台访问权限