1. Оператор UNION в SQL
Оператор UNION в SQL: Объединение миров
Оператор UNION — это не просто способ объединить два запроса. В руках атакующего это мощный инструмент для извлечения данных из не связанных между собой таблиц. Мы увидим, как хакер может заставить ваше приложение вывести список паролей вместо списка товаров.
Разберем механику UNION-атак и узнаем, какие строгие условия должны соблюдаться для их успеха.
1. Как работает UNION в норме
Представьте, что у вас есть две таблицы: products_active и products_archive. Чтобы получить список всех товаров из обеих таблиц одним запросом, вы пишете:
SELECT name, price FROM products_active
UNION
SELECT name, price FROM products_archive;
Результат: База данных "склеит" строки из второй таблицы в конец первой.
2. Главное правило UNION: Золотое трио
Чтобы UNION сработал, должны соблюдаться три жестких условия:
- Число колонок: В обоих запросах должно быть ОДИНАКОВОЕ количество колонок.
- Типы данных: Типы данных в соответствующих колонках должны быть совместимыми (например, нельзя склеить
INTиTEXTв одну колонку в некоторых СУБД). - Порядок: Колонки должны стоять в одном порядке.
3. Механика в руках хакера
Если в вашем Go-коде есть уязвимый запрос:
SELECT title, description FROM items WHERE category = '%s' (через fmt.Sprintf).
Хакер вводит в category: ' UNION SELECT username, password FROM users --.
Как это видит SQL-парсер:
SELECT title, description FROM items WHERE category = ''
UNION
SELECT username, password FROM users --'
ИТОГ: Вместо списка предметов категории "хлеб", пользователь (хакер) видит на сайте список логинов и паролей всех пользователей!
Как это выглядит в браузере
Точка входа этой лабы — поле поиска каталога. GET-параметр q= уходит напрямую в SQL-запрос без параметризации:

Если в поле поиска подать payload с правильным числом колонок и совместимыми типами, среди настоящих товаров появится «фейковый» — это и будут данные из инъецированного SELECT. Конкретный пейлоад в подсказках лабы намеренно не приведён — собрать его студент должен сам, разобрав теорию ORDER BY и type matching.
4. Сравнение: Обычный запрос vs UNION Атака
| Параметр | Обычный запрос | UNION Атака |
|---|---|---|
| Что запрашиваем | Товары | Товары + Юзеры |
| Количество строк | 10 (товаров) | 10 + 1000 (юзеров) |
| Результат | Страница каталога | Страница с паролями |
UNION — это мощнейший рычаг, позволяющий хакеру вытащить из вашей базы абсолютно всё. Если вы не защитили свой SELECT через параметры, считайте, что все ваши таблицы стали общественным достоянием.
В следующем подмодуле мы изучим первый шаг разведки — определение числа колонок с помощью трюка ORDER BY.
Продолжить чтение
Что бы прочитать модуль полностью, зарегистрируйтесь/войдите на платформу
Когда закончишь — отметь раздел, чтобы продолжить.