Найти тему

Внеполосные SQL-инъекции (Out-of-Band SQL Injection). Как защититься?

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

— это тип SQL-инъекций, при котором злоумышленник не получает немедленный ответ от сервера через HTTP-запрос, как это происходит в классических SQL-инъекциях.

Вместо этого он использует сторонние каналы передачи данных (например, DNS или HTTP-запросы), чтобы получить информацию или выполнить команду.

Этот вид SQL-инъекций часто используется в ситуациях, когда:

  • Прямой вывод данных на страницу невозможен (например, из-за фильтрации ответов или отсутствия видимой реакции).
  • Сервер блокирует прямые ошибки базы данных или не возвращает ошибки SQL в HTTP-ответе.

Out-of-Band (OOB) инъекции часто требуют от сервера возможности делать исходящие HTTP или DNS-запросы. В таком случае злоумышленник может заставить сервер посылать запросы на свой сервер, получая данные через эти запросы.

Пример сценария Out-of-Band SQL-инъекции:

Представьте, что вы тестируете веб-приложение, которое использует SQL-запросы для обработки данных, но приложение не выводит ошибки на экран и фильтрует стандартные SQL-инъекции. Однако, сервер имеет возможность отправлять исходящий трафик в интернет, например, выполняя DNS-запросы.

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

Пример запроса:

http://example.com/products?id=1

Допустим, SQL-запрос, который выполняется на стороне сервера, выглядит так:

SELECT * FROM products WHERE id = 1;

Теперь, если мы инжектируем полезную нагрузку, чтобы заставить сервер выполнить DNS-запрос, это может выглядеть следующим образом:

Этот запрос пытается прочитать файл или вызвать DNS-запрос на удалённый сервер, контролируемый злоумышленником.

В данном случае, @@version — это системная переменная базы данных, которая содержит информацию о версии базы данных.

Этот запрос может привести к тому, что сервер отправит DNS-запрос к домену attacker.com, включив в него результат SQL-запроса (в данном случае, версию базы данных).

Например, сервер базы данных может выполнить DNS-запрос вроде:

12.34.56.78:53 (attacker.com): MySQL_5.7.29.attacker.com

Злоумышленник может настроить свой DNS-сервер для перехвата таких запросов и извлечения информации.

Как это выглядит на практике:

1. Злоумышленник контролирует домен attacker.com и настроил свой DNS-сервер для улавливания входящих запросов.

2. Полезная нагрузка инъекции отправляется через параметр, например:

-2

3. Сервер базы данных интерпретирует инъекцию как команду для выполнения SQL-запроса с вставкой результата в DNS-запрос.

4. Злоумышленник, проверяя свой DNS-сервер, получает запрос вида MySQL_5.7.29.attacker.com, что дает ему информацию о версии базы данных.

Практическая реализация с Burp Suite:

1. Настройка прокси и перехват запросов: Открываем Burp Suite и настраиваем прокси, чтобы перехватывать запросы веб-приложения.

2. Поиск подходящих параметров: Перехватываем запрос с параметрами, которые могут быть уязвимы для SQL-инъекций. Например, это может быть параметр id в строке запроса.

3. Отправка полезной нагрузки: В Burp Suite перехватываем запрос и изменяем параметр id, вставив туда внеполосную полезную нагрузку:

-3

4. Отслеживание исходящего трафика: Злоумышленник должен следить за своим DNS-сервером, чтобы увидеть запросы, поступающие на его домен. В полученных запросах он сможет обнаружить результаты выполнения инъекции.

Примеры данных, которые можно извлечь через Out-of-Band SQL-инъекцию:

  • Версия базы данных: @@version
  • Название текущей базы данных: DATABASE()
  • Имя пользователя базы данных: USER()

Инструменты для облегчения работы с Out-of-Band SQLi:

  • Burp Suite: Может быть использован для перехвата и модификации запросов, добавления инъекций и отслеживания ответа.
  • SQLMap: Поддерживает автоматическое обнаружение и эксплуатацию Out-of-Band SQL-инъекций, включая функциональность для работы с DNS-запросами для получения данных.
  • Dnsmasq или другой DNS-сервер: Вы можете настроить свой DNS-сервер для перехвата запросов с уязвимого сервера.

Защита от Out-of-Band SQL-инъекций:

  • Использование параметризованных запросов (prepared statements): Это предотвращает возможность динамической вставки SQL-кода в запросы.
  • Фильтрация и валидация пользовательского ввода: Всегда проверяйте и фильтруйте данные, вводимые пользователями, чтобы убедиться, что они соответствуют ожидаемому формату.
  • Ограничение исходящего трафика: Настройте серверные политики так, чтобы сервер базы данных не мог делать исходящие HTTP или DNS-запросы, если в этом нет необходимости.
  • Мониторинг исходящего трафика: Активно отслеживайте и анализируйте исходящий трафик на предмет подозрительных DNS или HTTP-запросов, которые могут указывать на попытки эксплуатации уязвимости.

Заключение:

Out-of-Band SQL-инъекции — это опасный инструмент, используемый в случаях, когда обычные (inline) SQL-инъекции не дают немедленного результата.

Они требуют более глубокого понимания работы сетей и баз данных, а также возможности использования сторонних каналов передачи данных.

Этим типом инъекций редко атакуют простые веб-приложения, но он может быть очень опасен в сложных инфраструктурах с возможностью исходящего трафика.

-4

Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам