SQL-инъекции остаются критичной угрозой в 2026. Разбор техник: классический UNION, Error-based, Boolean/Time blind, обход WAF через HTTP/2, NoSQL-инъекции и защита. Инструменты пентестера: sqlmap, Ghauri, ручная эксплуатация.
SQL-инъекции — ровесницы веба, но в 2026 году они по-прежнему возглавляют рейтинги OWASP и Bug Bounty. Современные средства защиты вроде WAF и ORM усложнили эксплуатацию, но не устранили проблему. Злоумышленники перешли на техники обхода, использующие особенности HTTP/2, дробление пейлоадов и слепые каналы эксфильтрации. В этом гайде — полный путь от понимания уязвимости до продвинутых атак, актуальных для пентестеров и этичных хакеров.
Что такое SQL-инъекция и почему она до сих пор актуальна
SQL-инъекция — это внедрение произвольного SQL-кода в запрос к базе данных через поля ввода, параметры URL или HTTP-заголовки. Причина — недостаточная фильтрация пользовательского ввода и склеивание строк для формирования запросов. Несмотря на повсеместное внедрение подготовленных выражений, legacy-код, некорректное использование ORM и ручное экранирование оставляют бреши. В 2026 году SQLi находят в API, GraphQL-эндпоинтах, панелях администрирования и даже в логах, где подставленные значения попадают в аналитические запросы.
Классификация и примеры эксплуатации
Выделяют несколько типов инъекций, различающихся по способу извлечения данных.
UNION-based инъекция. Самый наглядный тип. Злоумышленник добавляет конструкцию UNION SELECT для объединения результатов легитимного запроса с собственными. Требуется знание количества и типов столбцов. Пример для MySQL:
text
' UNION SELECT NULL, username, password FROM users-- -
В 2026 году автоматизированные сканеры легко находят UNION-дыры, но ручное тестирование остаётся ключевым для нестандартных обёрток.
Error-based инъекция. Использует вывод сообщений об ошибках СУБД для извлечения данных. Например, в MSSQL через CONVERT или CAST можно спровоцировать раскрытие содержимого таблиц:
text
' AND 1=CONVERT(int, (SELECT TOP 1 password FROM users))-- -
Современные WAF часто блокируют подробные ошибки, но в тестовых и staging-средах ошибки всё ещё утекают.
Boolean-based blind SQLi. Приложение не выдаёт ни данных, ни ошибок, но меняет поведение (разный ответ при истинном и ложном условии). Атакующий задаёт вопросы базе через подбор по символам:
text
' AND SUBSTRING((SELECT password FROM users LIMIT 1),1,1)='a'-- -
Если страница возвращается нормально — условие истинно. Автоматизация таких атак требует сотен запросов, поэтому пентестеры используют sqlmap с опциями --technique=B.
Time-based blind SQLi. Единственный способ получить данные, когда нет видимой разницы в ответах. Внедряется вызов задержки (например, SLEEP(5) в MySQL или pg_sleep(5) в PostgreSQL), который срабатывает при истинном условии. Позволяет извлекать данные, но медленно. В 2026 году актуальность снизилась из-за высоких таймаутов и систем мониторинга аномальных задержек, но для точечных атак на API всё ещё используется.
Out-of-Band (OOB) SQLi. Использует каналы обратной связи: DNS, HTTP-запросы. Например, в Oracle через UTL_HTTP можно отправить запрос на подконтрольный сервер с содержимым таблиц. Требует специфических привилегий, но эффективна, когда blind-методы слишком медленные.
SQLi в ORM и NoSQL: недооценённые векторы
ORM-инъекции. Разработчики думают, что ORM (Hibernate, Entity Framework, Sequelize) автоматически защищают от инъекций, но это не так. Функции сырых запросов (raw queries), динамическая сортировка, фильтрация по произвольным колонкам — всё это может быть уязвимо. Пример уязвимого кода на Python (Django ORM):
python
User.objects.raw("SELECT * FROM users WHERE username = '%s'" % username)
Даже при использовании ORM нужно избегать конкатенации строк и использовать параметризованные методы.
NoSQL-инъекции. MongoDB, Redis, Elasticsearch — все они подвержены инъекциям, если обрабатывают JSON-подобные запросы без проверки типов. Классический пример с MongoDB, где передача {"$gt":""} в логине обходит аутентификацию:
json
{"username": {"$ne": ""}, "password": {"$ne": ""}}
В 2026 году такие уязвимости всё ещё находят в GraphQL-резолверах, которые напрямую передают аргументы в NoSQL-движки без валидации.
Обход WAF нового поколения
Современные файрволы (Cloudflare, AWS WAF, ModSecurity с CRS 4.x) используют сигнатурный анализ и машинное обучение для блокировки SQLi. Пентестеры в ответ применяют изощрённые техники.
Практическая методика поиска SQLi в 2026
SQL-инъекции не умерли. Они мутировали, спрятались в JSON, API и GraphQL, но по-прежнему приводят к утечкам данных и полной компрометации систем. В 2026 году успешный пентестер обязан владеть как классическими техниками, так и методами обхода продвинутых WAF. Публикация этого гайда на форуме привлечёт как новичков, так и практиков, желающих актуализировать свои знания. Следующий материал — «SSRF: облачные метаданные, внутренние сервисы и RCE» — закроет ещё один критический вектор веб-хакинга.
SQL-инъекции — ровесницы веба, но в 2026 году они по-прежнему возглавляют рейтинги OWASP и Bug Bounty. Современные средства защиты вроде WAF и ORM усложнили эксплуатацию, но не устранили проблему. Злоумышленники перешли на техники обхода, использующие особенности HTTP/2, дробление пейлоадов и слепые каналы эксфильтрации. В этом гайде — полный путь от понимания уязвимости до продвинутых атак, актуальных для пентестеров и этичных хакеров.
Что такое SQL-инъекция и почему она до сих пор актуальна
SQL-инъекция — это внедрение произвольного SQL-кода в запрос к базе данных через поля ввода, параметры URL или HTTP-заголовки. Причина — недостаточная фильтрация пользовательского ввода и склеивание строк для формирования запросов. Несмотря на повсеместное внедрение подготовленных выражений, legacy-код, некорректное использование ORM и ручное экранирование оставляют бреши. В 2026 году SQLi находят в API, GraphQL-эндпоинтах, панелях администрирования и даже в логах, где подставленные значения попадают в аналитические запросы.
Классификация и примеры эксплуатации
Выделяют несколько типов инъекций, различающихся по способу извлечения данных.
UNION-based инъекция. Самый наглядный тип. Злоумышленник добавляет конструкцию UNION SELECT для объединения результатов легитимного запроса с собственными. Требуется знание количества и типов столбцов. Пример для MySQL:
text
' UNION SELECT NULL, username, password FROM users-- -
В 2026 году автоматизированные сканеры легко находят UNION-дыры, но ручное тестирование остаётся ключевым для нестандартных обёрток.
Error-based инъекция. Использует вывод сообщений об ошибках СУБД для извлечения данных. Например, в MSSQL через CONVERT или CAST можно спровоцировать раскрытие содержимого таблиц:
text
' AND 1=CONVERT(int, (SELECT TOP 1 password FROM users))-- -
Современные WAF часто блокируют подробные ошибки, но в тестовых и staging-средах ошибки всё ещё утекают.
Boolean-based blind SQLi. Приложение не выдаёт ни данных, ни ошибок, но меняет поведение (разный ответ при истинном и ложном условии). Атакующий задаёт вопросы базе через подбор по символам:
text
' AND SUBSTRING((SELECT password FROM users LIMIT 1),1,1)='a'-- -
Если страница возвращается нормально — условие истинно. Автоматизация таких атак требует сотен запросов, поэтому пентестеры используют sqlmap с опциями --technique=B.
Time-based blind SQLi. Единственный способ получить данные, когда нет видимой разницы в ответах. Внедряется вызов задержки (например, SLEEP(5) в MySQL или pg_sleep(5) в PostgreSQL), который срабатывает при истинном условии. Позволяет извлекать данные, но медленно. В 2026 году актуальность снизилась из-за высоких таймаутов и систем мониторинга аномальных задержек, но для точечных атак на API всё ещё используется.
Out-of-Band (OOB) SQLi. Использует каналы обратной связи: DNS, HTTP-запросы. Например, в Oracle через UTL_HTTP можно отправить запрос на подконтрольный сервер с содержимым таблиц. Требует специфических привилегий, но эффективна, когда blind-методы слишком медленные.
SQLi в ORM и NoSQL: недооценённые векторы
ORM-инъекции. Разработчики думают, что ORM (Hibernate, Entity Framework, Sequelize) автоматически защищают от инъекций, но это не так. Функции сырых запросов (raw queries), динамическая сортировка, фильтрация по произвольным колонкам — всё это может быть уязвимо. Пример уязвимого кода на Python (Django ORM):
python
User.objects.raw("SELECT * FROM users WHERE username = '%s'" % username)
Даже при использовании ORM нужно избегать конкатенации строк и использовать параметризованные методы.
NoSQL-инъекции. MongoDB, Redis, Elasticsearch — все они подвержены инъекциям, если обрабатывают JSON-подобные запросы без проверки типов. Классический пример с MongoDB, где передача {"$gt":""} в логине обходит аутентификацию:
json
{"username": {"$ne": ""}, "password": {"$ne": ""}}
В 2026 году такие уязвимости всё ещё находят в GraphQL-резолверах, которые напрямую передают аргументы в NoSQL-движки без валидации.
Обход WAF нового поколения
Современные файрволы (Cloudflare, AWS WAF, ModSecurity с CRS 4.x) используют сигнатурный анализ и машинное обучение для блокировки SQLi. Пентестеры в ответ применяют изощрённые техники.
- Дробление пейлоада по параметрам. Вместо одного параметра с ' OR 1=1-- используется два: ?id=1'&x=OR&y=1=1. WAF видит безобидные части, а на бэкенде они склеиваются.
- HTTP Parameter Pollution (HPP). Отправка параметра несколько раз: ?id=1'&id= UNION SELECT.... Некоторые движки берут первое значение, другие — последнее или склеивают.
- HTTP/2 multiplexing и single-packet атаки. Схожи с race condition: несколько запросов отправляются в одном пакете, WAF не успевает коррелировать контекст и может пропустить вредоносный запрос в середине.
- Кодировки и обфускация. Комментарии внутри ключевых слов (UN/**/ION), двойное URL-кодирование, использование эквивалентных функций (CHAR(65) вместо 'A'), смешение регистров (UnIoN).
- Использование легитимных JSON и XML. WAF редко глубоко парсит JSON. Передача {"id": "1 UNION SELECT ..."} может быть воспринята как строка, а ORM преобразует в число и выполнит инъекцию.
Практическая методика поиска SQLi в 2026
- Рекогносцировка. Собрать все эндпоинты, принимающие параметры (GET, POST, заголовки, cookies). Использовать прокси для отслеживания API-запросов.
- Обнаружение аномалий. Вставлять одинарные кавычки, точки с запятой, логические операторы (' AND '1'='1, ' AND '1'='2) и сравнивать ответы. Любое отличие — повод копать глубже.
- Определение типа СУБД. По сообщениям об ошибках, диалекту SQL (встроенные функции, синтаксис комментариев), поведению при sleep-запросах.
- Автоматизация с sqlmap. Для ускорения можно использовать sqlmap -r request.txt --level=3 --risk=2 --tamper=between,space2comment --batch. Для слепых инъекций — --technique=B --string="Welcome".
- Ручная эксплуатация. Там, где автоматика пасует (сложная логика, капча, токены), переходить на ручной подбор с кастомными скриптами на Python.
- Параметризованные запросы (Prepared Statements). 100% защита от классических SQLi. Обязательно использовать для всех операций с БД.
- Хранимые процедуры с корректной параметризацией внутри.
- Валидация ввода по белому списку. Для полей, которые должны быть числами — преобразование в int, для строк — строгая проверка допустимых символов.
- Принцип наименьших привилегий. Аккаунт приложения должен иметь доступ только к необходимым таблицам и операциям. Запретить выполнение системных команд (xp_cmdshell в MSSQL), чтение файлов (LOAD_FILE в MySQL).
- WAF в режиме блокировки с актуальными правилами (OWASP CRS). Но помнить, что WAF — не панацея, а дополнительный рубеж.
- Мониторинг и алертинг. Логировать все ошибки БД и попытки массовых однотипных запросов. SIEM с правилами корреляции выявит активное blind-тестирование.
- sqlmap — главный инструмент, поддерживающий все техники и сотни тамперов.
- Ghauri — форк sqlmap с улучшенным движком слепой инъекции и продвинутой обфускацией.
- Burp Suite с расширением SQLiPy или ручным Intruder'ом.
- NoSQLMap — для NoSQL-инъекций в MongoDB, CouchDB.
- SQLninja — специализированный инструмент для атак на MSSQL с возможностью получения shell через xp_cmdshell.
- Атаки смещаются в GraphQL и NoSQL из-за роста популярности этих технологий.
- Обход WAF через HTTP/2 и HTTP/3 multiplexing — главный вектор.
- Использование машинного обучения злоумышленниками для автоматической генерации обфусцированных пейлоадов.
- Рост значимости Out-of-Band инъекций в облачных средах, где базы данных имеют доступ к внешним ресурсам.
- Интеграция инструментов динамического тестирования (DAST) в CI/CD пайплайны, что снижает время нахождения уязвимости.
SQL-инъекции не умерли. Они мутировали, спрятались в JSON, API и GraphQL, но по-прежнему приводят к утечкам данных и полной компрометации систем. В 2026 году успешный пентестер обязан владеть как классическими техниками, так и методами обхода продвинутых WAF. Публикация этого гайда на форуме привлечёт как новичков, так и практиков, желающих актуализировать свои знания. Следующий материал — «SSRF: облачные метаданные, внутренние сервисы и RCE» — закроет ещё один критический вектор веб-хакинга.