seacms 9.92全局变量覆盖从越权到RCE
字数 1044 2025-08-18 11:38:52
SeaCMS 9.92 全局变量覆盖漏洞分析:从越权到RCE
漏洞概述
SeaCMS 9.92版本存在一个严重的全局变量覆盖漏洞,攻击者可以利用该漏洞实现前台越权访问后台,并最终获取远程代码执行(RCE)权限。该漏洞已被CNVD收录,厂商已发布修复版本。
漏洞分析
1. 变量覆盖漏洞根源
漏洞位于common.php文件中:
-
变量过滤不完整:
- 文件第22行对请求参数进行了校验以防止变量覆盖,但遗漏了对
$_FILES的校验 - 第115行存在动态赋值操作,允许注册
$FILES变量
- 文件第22行对请求参数进行了校验以防止变量覆盖,但遗漏了对
-
文件包含逻辑:
- 第200行判断是否存在
$_FILES变量,如果存在则包含uploadsafe.inc.php
- 第200行判断是否存在
2. uploadsafe.inc.php中的关键漏洞
在uploadsafe.inc.php文件中:
// 第34行存在未加限制的变量覆盖
foreach($_POST as $key => $value) {
$$
key = $value;
}
由于第21行有判断条件,攻击者需要同时提交以下参数才能成功覆盖session:
_SESSION[seaadminid]_SESSION[seagroupid]_SESSION[sea_ckstr](登录验证码)_FILEScheck
3. 越权攻击流程
- 注册普通用户:在前台注册一个普通用户(如test:123456)
- 构造恶意请求:在登录时提交精心构造的POST数据
- 覆盖session:将普通用户的session覆盖为管理员session
- 访问后台:直接获得管理员权限
4. 后台RCE漏洞
后台RCE漏洞位于adminconfigmark.php文件:
- 动态变量注册:19-23行循环接收"photo_*"参数并动态注册变量
- 配置写入:将变量拼接成字符串
$configstr后写入配置文件 - 文件包含:第56行写入后包含该配置文件
漏洞复现步骤
越权攻击
- 注册普通用户账号
- 登录时提交以下恶意请求:
POST /login.php HTTP/1.1
...
check=1&_FILES=1&_SESSION[seaadminid]=1&_SESSION[seagroupid]=1&_SESSION[sea_ckstr]=
- 访问后台地址,获得管理员权限
后台RCE
- 访问后台图片水印设置功能
- 提交包含恶意代码的"photo_*"参数
- 系统将恶意代码写入配置文件并包含执行
漏洞修复建议
- 升级到SeaCMS最新版本(9.95或更高)
- 加强变量过滤,特别是对
$_FILES和$_SESSION的检查 - 对动态变量注册进行严格限制
- 配置文件写入前进行严格的过滤和校验
总结
该漏洞利用链展示了从变量覆盖到越权再到RCE的完整攻击路径,危害性极高。开发人员应重视全局变量覆盖问题,对所有用户输入进行严格过滤,特别是涉及权限控制和文件操作的敏感功能。