Перейти к содержимому

Поиск по платформе

UNION SQL Injection в поиске каталога

UNION-based SQL-инъекция через поиск товаров позволяет извлечь данные из таблицы пользователей.

Автор: Hack & Fix
Освоишь: параметризованные запросыprepared statementsleast-privilege DB
Средне+60 XP ~35 мин php
CWE-89 · A03:2021 Pro
Обложка: UNION SQL Injection в поиске каталога Обложка: UNION SQL Injection в поиске каталога
Задача
# SQL-инъекция: извлечение данных через поиск каталога ## Сценарий Вы проводите аудит интернет-магазина службы доставки «Ситифлоу» (нативный PHP 8.3, SQLite) перед подключением нового платёжного провайдера. Поддержка жалуется, что поиск по каталогу иногда «ломается» на необычных запросах, а внешний сканер пометил страницу каталога как подозрительную. Провайдер ждёт заключения — вам поручили разобраться с поиском в первую очередь. ## Цель 1. Подтвердите, что строка поиска попадает в SQL-запрос как часть синтаксиса, и определите число колонок выборки каталога. 2. Через инъекцию выведите на страницу каталога хеш пароля учётной записи `admin` из таблицы пользователей и восстановите сам пароль. 3. Войдите как `admin`, купите товар «CTF Flag» и заберите флаг со страницы профиля. ## Теория Когда приложение склеивает SQL-запрос из пользовательского ввода, атакующий получает контроль не только над логикой условия, но и над составом выборки. Результаты запроса каталог рендерит прямо в HTML — карточками товаров, — поэтому любые строки, попавшие в выборку, становятся видны в ответе. **Уязвимый паттерн:** ```php $sql = "SELECT id, name, description, price, image FROM products WHERE name LIKE '%" . $search . "%'"; $stmt = $db->query($sql); ``` Значение параметра поиска вклеивается в текст запроса целиком. Закрыв строковый литерал, атакующий дописывает к запросу вторую выборку из другой таблицы: при совпадении числа колонок СУБД объединяет обе выборки в одну, и строки из чужой таблицы приезжают на страницу как «лишние карточки товаров». Число колонок исходной выборки прощупывают сортировкой по номеру колонки, увеличивая его до первой ошибки. ## Точка входа атаки `GET /catalog` с параметром `q` — поле поиска по названию товара. * **Обычный пользователь:** `demo` / `demo` * **Целевая учётная запись:** `admin` — её пароль и есть добыча; в таблице пользователей он хранится в виде хеша. Флаг появится на странице `/profile` после входа под `admin` и покупки товара «CTF Flag» в каталоге.

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: SQL Injection в форме входа Обложка лабы: SQL Injection в форме входа
SQLi

SQL Injection в форме входа

Обход аутентификации через SQL-инъекцию в форме логина.

+30 XP
PHP Pro
Exploit Fix
Обложка лабы: Boolean-based Blind SQL Injection через cookie купона Обложка лабы: Boolean-based Blind SQL Injection через cookie купона
SQLi

Boolean-based Blind SQL Injection через cookie купона

Значение купона из cookie подставляется в SQL-запрос без параметризации, позволяя извлечь данные через boolean-based blind инъекцию.

+90 XP
PHP Pro
Exploit Fix
Обложка лабы: SQL Injection — обход WAF blacklist Обложка лабы: SQL Injection — обход WAF blacklist
SQLi

SQL Injection — обход WAF blacklist

WAF с blacklist-фильтром блокирует SQL-ключевые слова, но обходится через mixed case.

+90 XP
PHP Pro
Exploit Fix