Перейти к содержимому
Назад к пути
Теория 3 мин чтения

5. Разновидности инъекций

Разновидности SQL-инъекций: Как хакеры находят "щели"

Методы эксплуатации SQL-инъекций постоянно развиваются. В зависимости от того, как приложение возвращает данные и реагирует на ошибки, хакеры выбирают разные тактики. Кто-то действует в открытую, а кто-то — почти бесшумно.

Классификация по способу получения данных (в академической литературе её ввели Halfond, Viegas и Orso в 2006 году в работе «A Classification of SQL-Injection Attacks and Countermeasures») делит атаки на три большие категории: In-band, Blind и Out-of-band. Эта таксономия используется в OWASP Testing Guide, сертификациях OSCP/OSWE и инструменте sqlmap. Понимание различий критично для defender'а: одни типы детектируются по логам приложения, другие требуют сетевого мониторинга, третьи практически невидимы без специализированных инструментов.

Познакомимся с основной классификацией атак: от «громких» UNION-запросов до скрытных временных задержек.


1. Прямые инъекции (In-band SQLi)

Это "классика". Хакер использует тот же канал связи (например, HTTP-ответ) для запуска атаки и получения результатов. Это самый простой и мощный тип инъекций.

Основные подвиды:

  • Error-based SQLi: Хакер вызывает ошибки в базе (например, деление на ноль), в тексте которых база сама "выплевывает" секретные данные (версию СУБД, имена таблиц).
  • UNION-based SQLi: Хакер подставляет команду UNION SELECT и доклеивает свои данные в ответ оригинального запроса. Именно этот тип мы разберем в Модуле 3.

In-band — самый предпочтительный тип для атакующего, потому что эксфильтрация занимает один запрос и не требует автоматизации. Если найден In-band SQLi через ?id=1 UNION SELECT username, password FROM users--, атакующий получает всю таблицу пользователей одним HTTP-ответом. Защита: error suppression в production (Go: не возвращать err.Error() в HTTP-ответе, скрывать stack trace через middleware-recovery), параметризованные запросы.


2. Слепые инъекции (Blind SQLi)

Самый коварный тип. Сервер не возвращает ошибок и не показывает данные из базы прямо в HTML. Единственное, что видит хакер — это то, как меняется поведение сайта (200 OK или 404 Not Found).

Основные подвиды:

  • Boolean-based: Хакер задает базе вопросы: "Твоя первая буква пароля это 'A'?" — Если сайт ответил "Да (200 OK)", хакер узнал один бит информации.
  • Time-based: Хакер просит базу: "Если первая буква пароля 'A', то подожди 5 секунд перед ответом". Если сервер ответил с задержкой — буква найдена. Этому посвящены Модули 5 и 6.

Blind-инъекции требуют автоматизации: чтобы извлечь 32-символьный пароль, нужно отправить ~256 запросов (для каждой буквы алфавита из 32 позиций). Sqlmap делает это автоматически за несколько минут. С точки зрения детекции, blind виден в логах как множество однотипных запросов с разными значениями — паттерн, который SIEM может алертить через correlation rule.


3. Внеполосные инъекции (Out-of-Band SQLi)

Это когда хакер заставляет базу данных саму инициировать запрос к серверу хакера через DNS или HTTP. Это используется, когда все остальные каналы закрыты. Например, база данных посылает DNS-запрос: password_ot_admina.attacker.com. Хакер видит этот запрос в своих логах и получает пароль. Этому посвящен Модуль 8.


Таблица сравнения: Какой тип выбрать хакеру?

Тип инъекции Уровень сложности Шанс успеха Описание
In-band 🟢 Низкий 🌕 Высокий Данные приходят сразу в ответе.
Blind 🟡 Средний 🌗 Средний Нужно сотни запросов для чтения данных.
OOB 🔴 Высокий 🌖 Зависит от сети Нужен доступ в интернет из БД.

Тип инъекции определяет сложность атаки и её заметность в логах. Но в основе каждой из них лежит одна и та же ошибка разработчика.

Универсальная защита: параметризованные запросы (Prepared Statements) закрывают ВСЕ три типа одновременно — In-band, Blind и OOB. Это и есть причина, почему именно параметризация, а не WAF/error suppression/whitelist, является main-line defence против SQLi. Дополнительные меры (WAF, network policy, least privilege) — это слои Defense in Depth для случаев, когда Prepared Statements забыли применить в одном из endpoints. Соответствие стандартам: OWASP Top 10 A03:2021 Injection — #3 в рейтинге; CWE-89; CAPEC-66.

Пришло время рассмотреть главного виновника торжества в Go — использование функций форматирования строк для работы с БД.

Продолжить чтение

Что бы прочитать модуль полностью, зарегистрируйтесь/войдите на платформу

Когда закончишь — отметь раздел, чтобы продолжить.

🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru