SQL-инъекции в 2026 году: полный гайд — от UNION до обхода WAF нового поколения

god

New member
Член команды
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. Пентестеры в ответ применяют изощрённые техники.

  • Дробление пейлоада по параметрам. Вместо одного параметра с ' 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 преобразует в число и выполнит инъекцию.
Инструменты для обхода: sqlmap с тамперами (--tamper=space2comment,charencode), ручное тестирование через Burp Suite, специализированный инструмент Ghauri (современный аналог sqlmap с продвинутой обфускацией для сложных WAF).

Практическая методика поиска SQLi в 2026
  1. Рекогносцировка. Собрать все эндпоинты, принимающие параметры (GET, POST, заголовки, cookies). Использовать прокси для отслеживания API-запросов.
  2. Обнаружение аномалий. Вставлять одинарные кавычки, точки с запятой, логические операторы (' AND '1'='1, ' AND '1'='2) и сравнивать ответы. Любое отличие — повод копать глубже.
  3. Определение типа СУБД. По сообщениям об ошибках, диалекту SQL (встроенные функции, синтаксис комментариев), поведению при sleep-запросах.
  4. Автоматизация с sqlmap. Для ускорения можно использовать sqlmap -r request.txt --level=3 --risk=2 --tamper=between,space2comment --batch. Для слепых инъекций — --technique=B --string="Welcome".
  5. Ручная эксплуатация. Там, где автоматика пасует (сложная логика, капча, токены), переходить на ручной подбор с кастомными скриптами на Python.
Защита от SQL-инъекций: чек-лист для 2026
  • Параметризованные запросы (Prepared Statements). 100% защита от классических SQLi. Обязательно использовать для всех операций с БД.
  • Хранимые процедуры с корректной параметризацией внутри.
  • Валидация ввода по белому списку. Для полей, которые должны быть числами — преобразование в int, для строк — строгая проверка допустимых символов.
  • Принцип наименьших привилегий. Аккаунт приложения должен иметь доступ только к необходимым таблицам и операциям. Запретить выполнение системных команд (xp_cmdshell в MSSQL), чтение файлов (LOAD_FILE в MySQL).
  • WAF в режиме блокировки с актуальными правилами (OWASP CRS). Но помнить, что WAF — не панацея, а дополнительный рубеж.
  • Мониторинг и алертинг. Логировать все ошибки БД и попытки массовых однотипных запросов. SIEM с правилами корреляции выявит активное blind-тестирование.
Инструментарий пентестера для SQLi
  • sqlmap — главный инструмент, поддерживающий все техники и сотни тамперов.
  • Ghauri — форк sqlmap с улучшенным движком слепой инъекции и продвинутой обфускацией.
  • Burp Suite с расширением SQLiPy или ручным Intruder'ом.
  • NoSQLMap — для NoSQL-инъекций в MongoDB, CouchDB.
  • SQLninja — специализированный инструмент для атак на MSSQL с возможностью получения shell через xp_cmdshell.
Тренды SQL-инъекций в 2026 году
  • Атаки смещаются в GraphQL и NoSQL из-за роста популярности этих технологий.
  • Обход WAF через HTTP/2 и HTTP/3 multiplexing — главный вектор.
  • Использование машинного обучения злоумышленниками для автоматической генерации обфусцированных пейлоадов.
  • Рост значимости Out-of-Band инъекций в облачных средах, где базы данных имеют доступ к внешним ресурсам.
  • Интеграция инструментов динамического тестирования (DAST) в CI/CD пайплайны, что снижает время нахождения уязвимости.
Заключение
SQL-инъекции не умерли. Они мутировали, спрятались в JSON, API и GraphQL, но по-прежнему приводят к утечкам данных и полной компрометации систем. В 2026 году успешный пентестер обязан владеть как классическими техниками, так и методами обхода продвинутых WAF. Публикация этого гайда на форуме привлечёт как новичков, так и практиков, желающих актуализировать свои знания. Следующий материал — «SSRF: облачные метаданные, внутренние сервисы и RCE» — закроет ещё один критический вектор веб-хакинга.
 
Вверх