【代码审计】eyouCMS最新版getshell漏洞
字数 1438 2025-08-10 08:29:06
EyouCMS最新版Getshell漏洞分析与利用
漏洞概述
EyouCMS是一款流行的内容管理系统,最新版本中存在一个严重的安全漏洞组合,攻击者可以通过以下两个步骤实现Getshell:
- 前台设置管理员Session实现未授权访问后台
- 后台远程插件下载功能中的文件包含漏洞实现代码执行
漏洞细节分析
第一部分:前台设置管理员Session
漏洞位置
application/api/controller/Ajax.php 第219行的get_token函数
利用原理
get_token函数可以前台随意调用,且$name变量通过HTTP请求可控- 函数内部调用
token函数时会设置Session,Session名可控,值为请求时间戳的MD5值 - 后台管理员登录验证逻辑(
application/admin/controller/Base.php第61行)依赖三个Session:admin_id:只需存在即可,不验证值admin_login_expire:会进行减法校验,需要满足特定条件admin_info.role_id:需要满足比较小于0的条件
利用方法
- 通过
get_token函数设置admin_idSession - 精心挑选一个MD5值,使其前缀为长数字串,这样计算出的结果为负数,满足
admin_login_expire条件 - 设置
admin_info.role_idSession,使其值小于0
第二部分:后台远程插件下载Getshell
漏洞位置
application/admin/controller/Weapp.php 第1285行
利用原理
- 后台提供远程插件下载功能,参数
$url可控 - URL校验仅检查host是否为
eyoucms.com,校验过于简单可绕过 - 下载后会解压压缩包并包含其中的
config.php文件
利用方法
- 构造恶意压缩包,目录结构如下:
plugin/ └── config.php (包含恶意代码) - 在官网提问功能处上传该压缩包(修改为图片后缀)
- 获取上传后的图片路径
- 构造请求触发文件包含漏洞
漏洞复现步骤
第一步:获取管理员权限
- 构造请求设置必要的Session:
- 调用
get_token设置admin_id - 设置
admin_login_expire为特定格式的MD5值 - 设置
admin_info.role_id为小于0的值
- 调用
第二步:准备恶意插件
- 创建
plugin/config.php文件,写入Webshell代码 - 将整个目录压缩为ZIP文件
- 修改文件后缀为图片格式(如.jpg)
第三步:上传恶意插件
- 登录EyouCMS官网
- 使用提问功能上传伪装成图片的恶意压缩包
- 记录上传后的文件路径
第四步:触发文件包含
- 使用获取的后台权限访问插件下载功能
- 构造URL参数指向上传的恶意文件
- 触发文件包含执行恶意代码
防御措施
- 加强Session设置的安全性,避免前台接口设置敏感Session
- 完善管理员验证逻辑,增加多重验证机制
- 加强远程下载功能的校验:
- 增加签名验证
- 限制下载源为可信列表
- 检查文件完整性
- 对上传文件进行严格的内容检查,而不仅是后缀名检查
- 避免直接包含用户可控的文件
总结
该漏洞组合利用了两个关键问题:
- 不安全的Session管理导致权限提升
- 不安全的文件下载和包含机制导致代码执行
攻击者可以完全控制目标系统,危害极大。建议EyouCMS用户及时更新到修复版本,并检查系统是否存在可疑文件。