YzmCMS 5.4 后台getshell
字数 1321 2025-08-26 22:11:57
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
利用步骤
-
修改配置文件:
'file_config' => array ( 'cache_dir' => YZMPHP_PATH.'cache/chche_file/', 'suffix' => '.cache.php', 'mode' => '1', // 修改此处为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:
$1,eval(base64_decode($1c3lzdGVtKCdlY2hvIDEyMycpOw==$1)),$1其中
c3lzdGVtKCdlY2hvIDEyMycpOw==是system('echo 123');的base64编码 -
登录后台,访问系统管理 > 系统设置 > 附加设置
-
在"水印图片名称"字段中填入payload并提交
-
代码将被写入
common/config/config.php并执行
漏洞修复
-
缓存文件写入漏洞修复:
- 在
_fileputcontents函数中添加了退出代码 - 建议保持
mode为2的默认配置
- 在
-
配置文件修改漏洞修复:
- 过滤了
,和$字符 - 建议对配置值进行更严格的过滤
- 过滤了
总结
这两个漏洞都需要管理员权限,但利用难度较低:
- 缓存文件写入漏洞需要修改配置文件
- 配置文件修改漏洞可直接利用,更为实用
- 默认密码增加了漏洞利用的可能性
建议用户:
- 升级到最新版本
- 修改默认管理员密码
- 限制后台访问权限