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

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

SQL Injection: Boolean-based Blind

Извлечение данных через Boolean-based Blind SQLi в эндпоинте проверки купонов.

Автор: Hack & Fix
Освоишь: параметризованные запросыprepared statementsleast-privilege DB
Средне+60 XP ~35 мин python
CWE-89 · A03:2021 Pro
Обложка: SQL Injection: Boolean-based Blind Обложка: SQL Injection: Boolean-based Blind
Задача
# SQL-инъекция: слепая, с бинарным оракулом ## Сценарий «Терра Каффе» — интернет-магазин обжарщика кофе: каталог зёрен, подписки и промокоды со скидками в корзине. Служба поддержки заподозрила, что промокоды «утекают», и владелец нанял вас проверить магазин на проникновение. Единственная форма, где посетитель управляет текстом для базы данных, — применение промокода на странице корзины. ## Цель 1. Покажите, что код купона попадает в SQL-запрос как часть синтаксиса: подберите два значения, отличающихся только истинностью добавленного условия, и добейтесь разной реакции сервера. 2. Превратите исход «скидка применилась / не применилась» в оракул и извлеките посимвольно пароль администратора. 3. Войдите под администратором, купите товар «CTF Flag» — флаг появится на странице профиля. ## Теория Слепая инъекция возникает, когда результат запроса не отображается в ответе, но поведение сервера различается в зависимости от данных. Обработчик купона отвечает односложно: найден код — скидка применена, не найден — нет. Канал «один запрос — один бит» достаточен для полного извлечения данных. **Уязвимый паттерн:** ```python query = f"SELECT discount FROM coupons WHERE code = '{code}'" ``` Код купона вклеивается в текст запроса интерполяцией. Добавив к известному действующему купону ещё одно условие, атакующий превращает кнопку «Применить» в вопрос к базе: истинно ли утверждение о конкретном символе нужного значения. Перебирая позиции и символы, из базы вынимается любая строка — например, пароль администратора, хотя ни один байт ответа его не содержит. ## Точка входа атаки `POST /cart/coupon` — форма промокода на странице корзины, поле `code` (в корзине должен лежать хотя бы один товар). * **Обычный пользователь:** `demo` / `demo` * **Купон для калибровки оракула:** `SAVE10` * **Администратор:** `admin` / `???` (пароль хранится в базе — его и нужно извлечь)

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

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

SQL Injection: UNION SELECT

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

+60 XP
Python Pro
Exploit Fix
Обложка лабы: SQL Injection: Auth Bypass Обложка лабы: SQL Injection: Auth Bypass
SQLi

SQL Injection: Auth Bypass

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

+30 XP
Python Pro
Exploit Fix
Обложка лабы: SQL Injection: Time-based Blind Обложка лабы: SQL Injection: Time-based Blind
SQLi

SQL Injection: Time-based Blind

Извлечение данных через Time-based Blind SQLi в форме восстановления пароля Flask-приложения.

+90 XP
Python Pro
Exploit Fix
Обложка лабы: SQL Injection: Second-Order Обложка лабы: SQL Injection: Second-Order
SQLi

SQL Injection: Second-Order

SQL-инъекция второго порядка: payload сохраняется при регистрации и срабатывает при просмотре профиля.

+90 XP
Python Pro
Exploit Fix