Внеполосные 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. Полезная нагрузка инъекции отправляется через параметр, например:
3. Сервер базы данных интерпретирует инъекцию как команду для выполнения SQL-запроса с вставкой результата в DNS-запрос.
4. Злоумышленник, проверяя свой DNS-сервер, получает запрос вида MySQL_5.7.29.attacker.com, что дает ему информацию о версии базы данных.
Практическая реализация с Burp Suite:
1. Настройка прокси и перехват запросов: Открываем Burp Suite и настраиваем прокси, чтобы перехватывать запросы веб-приложения.
2. Поиск подходящих параметров: Перехватываем запрос с параметрами, которые могут быть уязвимы для SQL-инъекций. Например, это может быть параметр id в строке запроса.
3. Отправка полезной нагрузки: В Burp Suite перехватываем запрос и изменяем параметр id, вставив туда внеполосную полезную нагрузку:
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-инъекции не дают немедленного результата.
Они требуют более глубокого понимания работы сетей и баз данных, а также возможности использования сторонних каналов передачи данных.
Этим типом инъекций редко атакуют простые веб-приложения, но он может быть очень опасен в сложных инфраструктурах с возможностью исходящего трафика.
Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?
Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Обязательно прочитайте: Что должен знать и уметь тестировщик
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам