Что это за строка?
Строка ))) AND EXTRACTVALUE(6086,CONCAT(0x7e,((SELECT (ELT(6086=6086,1)))),0x7e))-- - — это классический пример error-based SQL-инъекции (инъекции на основе ошибок) для СУБД MySQL. Такие конструкции используют для извлечения данных из базы через сообщения об ошибках, которые возвращает сервер базы данных.
Подобные строки часто встречаются в логах веб-серверов, в полях ввода форм или в параметрах URL. Они могут быть как попыткой взлома, так и результатом работы автоматических сканеров уязвимостей.
Как работает error-based SQL-инъекция?
Основная идея метода: заставить базу данных выполнить такой запрос, который вернёт в тексте ошибки конфиденциальную информацию. В MySQL для этого часто используют функции EXTRACTVALUE() и UPDATEXML().
Функция EXTRACTVALUE(XML_document, XPath_expression) извлекает значение из XML-документа по заданному XPath-выражению. Если XPath содержит недопустимые символы, MySQL выдаёт ошибку, в которой отображается переданное значение. Это и позволяет злоумышленнику «вытащить» данные.
Разбор конкретной строки
)))— закрывающие скобки, которые завершают предыдущий запрос (нужны для корректного внедрения).AND EXTRACTVALUE(6086, ...)— вызов функции с первым аргументом 6086 (произвольное число, часто используется как идентификатор).CONCAT(0x7e, ((SELECT (ELT(6086=6086,1)))), 0x7e)— конкатенация тильды (~, код 0x7e), результата подзапроса и ещё одной тильды.SELECT (ELT(6086=6086,1))— подзапрос, который возвращает 1, если условие истинно (6086=6086 всегда истина), или NULL в противном случае. ELT(N, str1, str2, ...) возвращает N-ю строку из списка. Здесь N=1, поэтому возвращается 1.-- -— комментарий, который «отрезает» оставшуюся часть оригинального SQL-запроса.
В результате MySQL попытается извлечь значение из XPath, содержащего символ ~, что вызовет ошибку вида: XPATH syntax error: '~1~'. В реальной атаке вместо 1 подставляется подзапрос, возвращающий имя пользователя, версию БД, хеши паролей и т.д.
Пример реальной ошибки: XPATH syntax error: '~root@localhost~' — так злоумышленник может узнать имя пользователя базы данных.Цели злоумышленника
Основные цели error-based инъекций:
- Получение версии СУБД (например,
SELECT VERSION()). - Извлечение имён таблиц и колонок из
information_schema. - Чтение логинов и паролей пользователей.
- Получение другой конфиденциальной информации.
Часто такие строки — часть автоматизированного сканирования, например, с помощью sqlmap. Если вы видите подобное в логах, это повод проверить безопасность вашего веб-приложения.
Как защититься от SQL-инъекций?
Главный способ защиты — использование параметризованных запросов (prepared statements). Это исключает возможность внедрения SQL-кода, так как данные передаются отдельно от самого запроса.
Дополнительные меры:
- Экранирование специальных символов (но это менее надёжно, чем параметризация).
- Ограничение прав пользователя базы данных (принцип наименьших привилегий).
- Валидация и фильтрация входных данных на стороне сервера.
- Использование WAF (Web Application Firewall) для блокировки подозрительных запросов.
- Регулярное обновление СУБД и фреймворков.
Если вы разработчик, всегда проверяйте, что все запросы к базе данных используют подготовленные выражения. Не конкатенируйте пользовательский ввод в SQL-строки.
Что делать, если вы нашли такую строку в логах?
Не паникуйте, но отнеситесь серьёзно. Проверьте, не была ли атака успешной. Просмотрите логи веб-сервера и базы данных на предмет необычных запросов. Если есть подозрения на утечку, немедленно смените пароли и обновите уязвимые компоненты.
Помните: ошибки базы данных не должны отображаться пользователю. Настройте вывод общих сообщений об ошибках, а детали записывайте в защищённый лог.
Заключение
Строка EXTRACTVALUE(6086,CONCAT(0x7e,...)) — это не случайный набор символов, а целенаправленная попытка эксплуатировать уязвимость SQL-инъекции. Понимание принципов её работы помогает разработчикам и администраторам лучше защищать свои системы. Используйте параметризованные запросы, следите за обновлениями и не оставляйте базы данных без защиты.
Комментарии
—Войдите, чтобы оставить комментарий