ZoneMinder 基于时间的 SQL 注入(CVE-2024-51482)漏洞利用 POC
本仓库包含一个高性能、并行化的概念验证(PoC)漏洞利用脚本(Exploit.py),针对 ZoneMinder 1.37.* 至 1.37.64 版本中存在的盲 SQL 注入漏洞。
根据 GHSA-qm8h-3xvf-m7j3 所述,漏洞位于 web/ajax/event.php 中处理 removetag 操作时。tid(TagId)参数从请求中读取,并被不安全地直接拼接至 SQL 语句中:
$tagId = $_REQUEST['tid'];
// ...
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId";
$rowCount = dbNumRows($sql);
由于 $tagId 在传递给 dbNumRows() 之前未进行参数化处理,经过身份验证的攻击者可以利用基于布尔或基于时间的 SQL 注入技术(本 PoC 利用 SLEEP() 函数)注入任意 SQL 命令。
这允许完全控制 SQL 数据库,导致数据机密性和完整性受损,并可能通过持久化的 sleep 命令引发拒绝服务(DoS)。
从 1.37.65 版本开始,SQL 查询已正确参数化。存在漏洞的代码块已修复为构造安全查询:
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId);
v2.0 快速利用脚本通过多线程、优化的字符频率搜索以及动态阈值校准,将数据提取速度提升最多5倍,从而高效地从 zm.Users 数据库表中提取用户凭据(用户名:密码)。
Exploit.py v2.0 快速利用)zm.Users 表。http://<目标>/zm/index.phpview=request&request=event&action=removetagtidpython3 Exploit.py
运行脚本后,将以交互模式执行,并提示输入以下内容:
index.php 文件的路径(例如 http://zoneminder.local/zm/index.php)。ZMSESSID cookie。zm.Users 表。脚本会自动创建一个名为 extracted_data.txt 的文件,其中包含转储的凭据(格式为 用户名:密码)。同时,脚本还会显示实时执行统计信息,包括总耗时和总 HTTP 请求数。
免责声明: 本漏洞利用脚本仅限用于教育目的和授权的渗透测试。请勿将此工具用于不属于你或未获得明确测试许可的系统。