【代码审计】eyouCMS最新版getshell漏洞
字数 1438 2025-08-10 08:29:06

EyouCMS最新版Getshell漏洞分析与利用

漏洞概述

EyouCMS是一款流行的内容管理系统,最新版本中存在一个严重的安全漏洞组合,攻击者可以通过以下两个步骤实现Getshell:

  1. 前台设置管理员Session实现未授权访问后台
  2. 后台远程插件下载功能中的文件包含漏洞实现代码执行

漏洞细节分析

第一部分:前台设置管理员Session

漏洞位置

application/api/controller/Ajax.php 第219行的get_token函数

利用原理

  1. get_token函数可以前台随意调用,且$name变量通过HTTP请求可控
  2. 函数内部调用token函数时会设置Session,Session名可控,值为请求时间戳的MD5值
  3. 后台管理员登录验证逻辑(application/admin/controller/Base.php第61行)依赖三个Session:
    • admin_id:只需存在即可,不验证值
    • admin_login_expire:会进行减法校验,需要满足特定条件
    • admin_info.role_id:需要满足比较小于0的条件

利用方法

  1. 通过get_token函数设置admin_id Session
  2. 精心挑选一个MD5值,使其前缀为长数字串,这样计算出的结果为负数,满足admin_login_expire条件
  3. 设置admin_info.role_id Session,使其值小于0

第二部分:后台远程插件下载Getshell

漏洞位置

application/admin/controller/Weapp.php 第1285行

利用原理

  1. 后台提供远程插件下载功能,参数$url可控
  2. URL校验仅检查host是否为eyoucms.com,校验过于简单可绕过
  3. 下载后会解压压缩包并包含其中的config.php文件

利用方法

  1. 构造恶意压缩包,目录结构如下:
    plugin/
    └── config.php (包含恶意代码)
    
  2. 在官网提问功能处上传该压缩包(修改为图片后缀)
  3. 获取上传后的图片路径
  4. 构造请求触发文件包含漏洞

漏洞复现步骤

第一步:获取管理员权限

  1. 构造请求设置必要的Session:
    • 调用get_token设置admin_id
    • 设置admin_login_expire为特定格式的MD5值
    • 设置admin_info.role_id为小于0的值

第二步:准备恶意插件

  1. 创建plugin/config.php文件,写入Webshell代码
  2. 将整个目录压缩为ZIP文件
  3. 修改文件后缀为图片格式(如.jpg)

第三步:上传恶意插件

  1. 登录EyouCMS官网
  2. 使用提问功能上传伪装成图片的恶意压缩包
  3. 记录上传后的文件路径

第四步:触发文件包含

  1. 使用获取的后台权限访问插件下载功能
  2. 构造URL参数指向上传的恶意文件
  3. 触发文件包含执行恶意代码

防御措施

  1. 加强Session设置的安全性,避免前台接口设置敏感Session
  2. 完善管理员验证逻辑,增加多重验证机制
  3. 加强远程下载功能的校验:
    • 增加签名验证
    • 限制下载源为可信列表
    • 检查文件完整性
  4. 对上传文件进行严格的内容检查,而不仅是后缀名检查
  5. 避免直接包含用户可控的文件

总结

该漏洞组合利用了两个关键问题:

  1. 不安全的Session管理导致权限提升
  2. 不安全的文件下载和包含机制导致代码执行

攻击者可以完全控制目标系统,危害极大。建议EyouCMS用户及时更新到修复版本,并检查系统是否存在可疑文件。

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_id Session 精心挑选一个MD5值,使其前缀为长数字串,这样计算出的结果为负数,满足 admin_login_expire 条件 设置 admin_info.role_id Session,使其值小于0 第二部分:后台远程插件下载Getshell 漏洞位置 application/admin/controller/Weapp.php 第1285行 利用原理 后台提供远程插件下载功能,参数 $url 可控 URL校验仅检查host是否为 eyoucms.com ,校验过于简单可绕过 下载后会解压压缩包并包含其中的 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用户及时更新到修复版本,并检查系统是否存在可疑文件。