Перейти к содержимому
← Каталог python SQL Injection

SQL Injection: UNION SELECT

Извлечение данных из БД через UNION SELECT в поиске каталога Flask-приложения.

mediumpythonPro
Задача
# SQL Injection: UNION-based извлечение данных через поиск ## Сценарий Перед вами Flask-приложение интернет-магазина SecureShop. На странице каталога есть форма поиска по названию товара: введённая строка попадает в условие `LIKE` SQL-запроса, и сервер возвращает страницу со списком найденных товаров. Реализация имеет ту же фундаментальную ошибку, что и в других SQLi-задачах: значение из формы попадает в SQL-запрос **через строковую интерполяцию текста запроса**, без отделения данных от кода. Атакующий может управлять структурой запроса через содержимое поискового поля. Особенность этой задачи — обработчик **прямо отображает** результат запроса в HTML-ответе (карточки найденных товаров): атакующему доступен **прямой канал** вывода данных из БД. Это существенно мощнее blind-вариантов: один payload — и любые данные из БД попадают на страницу. Классическая техника для этого — **UNION-based SQL injection**: к исходному запросу через `UNION` добавляется второй запрос, выбирающий нужные данные из любой другой таблицы; результаты обоих запросов склеиваются в одну выборку, и нужные данные приходят в ответе как «дополнительные товары» на странице каталога. В таблице пользователей хранятся логины и пароли (включая `admin`), и у `admin`'а в каталоге есть необычный товар «CTF Flag», который дешёвый аккаунт `demo` купить не может — баланса не хватит. ## Цели 1. Подтвердите, что в форме поиска значения попадают в SQL **как часть синтаксиса**. Соберите классический UNION-payload в два шага: сначала определите количество колонок в исходном запросе (через `ORDER BY` с возрастающим номером — пока не получите ошибку), затем подберите типы колонок, чтобы UNION не падал. 2. Через UNION-инъекцию извлеките пароль пользователя `admin` из таблицы пользователей: значение придёт прямо на страницу каталога в виде «дополнительных» карточек товара. 3. Войдите как `admin`; купите «CTF Flag»; заберите CTF-флаг со страницы профиля. ## Данные | Параметр | Значение | |----------|----------| | Обычный пользователь | `demo` / `demo` |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru