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

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

SQL Injection: Time-based Blind

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

Автор: Hack & Fix
Освоишь: параметризованные запросыprepared statementsleast-privilege DB
Сложно+90 XP ~65 мин python
CWE-89 · A03:2021 Pro
Обложка: SQL Injection: Time-based Blind Обложка: SQL Injection: Time-based Blind
Задача
# SQL-инъекция: слепая, с временным каналом ## Сценарий «НордТрек» — интернет-магазин туристического снаряжения. Служба мониторинга заметила, что страница восстановления пароля иногда отвечает в разы дольше обычного, и администрация заподозрила атаку. Вы — приглашённый специалист по безопасности. Перед вами форма «забыли пароль»: посетитель вводит логин, сервер записывает уведомление в базу данных и всегда отвечает одно и то же — «если такой пользователь существует, письмо отправлено». ## Цель 1. Убедитесь, что форма не даёт ни вывода данных, ни ошибок, ни различий в поведении — и что логин всё же попадает в текст SQL-запроса. 2. Постройте временной оракул: значение, при истинном условии заставляющее базу выполнять заметно тяжёлую работу, и извлеките посимвольно пароль администратора. 3. Войдите под администратором, купите товар «CTF Flag» — флаг появится на странице профиля. ## Теория Это самая слепая разновидность инъекции: сервер не отражает ни данные, ни ошибки и отвечает одинаково на любой ввод. Остаётся последний канал — время. Если внедрённый в запрос код при истинном условии заставляет базу выполнить трудоёмкую операцию, а при ложном — нет, то задержка ответа становится ответом базы на вопрос атакующего. **Уязвимый паттерн:** ```python query = f"INSERT INTO emails (to_user, subject, body) VALUES ('{username}', 'Reset Password', '...')" ``` Логин вклеивается в текст запроса записи интерполяцией. Замкнув строковый литерал и добавив оператор ветвления с «тяжёлой» веткой — генерацией большого блока случайных данных, — атакующий превращает время ответа в единицу информации: есть задержка — условие истинно. Перебирая позиции и символы, из базы извлекается пароль администратора, хотя ответ сервера не меняется ни на байт. ## Точка входа атаки `POST /forgot-password` — форма восстановления пароля с полем `username` (авторизация не требуется). * **Обычный пользователь:** `demo` / `demo` * **Администратор:** `admin` / `???` (пароль хранится в базе — его и нужно извлечь)

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

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

SQL Injection: Second-Order

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

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

SQL Injection: WAF Bypass

Обход WAF с чёрным списком SQL-ключевых слов для эксплуатации SQL-инъекции в форме логина.

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

SQL Injection: Boolean-based Blind

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

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

SQL Injection: UNION SELECT

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

+60 XP
Python Pro
Exploit Fix