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

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

Time-Based Blind SQL Injection

Эксплуатация слепой SQL-инъекции, основанной на задержках времени ответа (Time-Based) в SQLite.

Автор: Hack & Fix
Освоишь: параметризованные запросыprepared statementsleast-privilege DB
Сложно+90 XP ~65 мин golang
CWE-89 · A03:2021
Обложка: Time-Based Blind SQL Injection Обложка: Time-Based Blind SQL Injection
Задача
# Слепая SQL-инъекция с временной задержкой (Time-Based Blind) ## Сценарий Вы проводите аудит безопасности **ZeroDayStore** — интернет-магазина мерча для специалистов по информационной безопасности, написанного на Go. Служба эксплуатации жалуется на необъяснимые ночные всплески нагрузки на базу данных: в эти минуты каталог отвечает в разы дольше обычного, хотя посетителей почти нет. Единственная зацепка в логах — нестандартный HTTP-заголовок `X-Track-ID`, который браузер отправляет при запросе каталога, а сервер передаёт внутренней системе аналитики. Проверьте, может ли содержимое этого заголовка влиять на время ответа сервера. ## Цель 1. Подтвердите наличие SQL-инъекции, добившись управляемой задержки ответа через заголовок `X-Track-ID`. 2. Превратите задержку в оракул: свяжите время ответа с истинностью условия о содержимом базы данных. 3. Посимвольно извлеките скрытую в базе секретную строку — она и есть флаг лабы. ## Теория **Time-Based Blind SQL Injection** — крайняя форма слепой инъекции: приложение не возвращает ни данных, ни ошибок, и единственный канал обратной связи — время ответа. Атакующий задаёт базе вопрос вида «если следующий символ секрета такой-то — выполни тяжёлую работу». Долгий ответ означает «да», мгновенный — «нет». **Уязвимый паттерн:** ```go // Значение HTTP-заголовка вставляется напрямую в INSERT-запрос: trackID := r.Header.Get("X-Track-ID") query := fmt.Sprintf("INSERT INTO tracking (tracking_id, user_agent) VALUES ('%s', 'Go-Client')", trackID) ``` Значение заголовка вклеивается в текст запроса без обработки. Кавычка в этом значении закрывает строковый литерал, и атакующий приклеивает к запросу собственное выражение с условной ветвью. Особенность SQLite — отсутствие штатной функции задержки: роль «тормоза» играет вычислительно дорогое выражение, время работы которого масштабируется по желанию атакующего. Если предикат о символе секретной строки истинен, база выполняет тяжёлый расчёт и ответ запаздывает; если ложен — запрос завершается мгновенно. Так каждый вопрос о символе получает ответ «да» или «нет» без единого байта утечки в теле ответа, а полный секрет собирается посимвольно. ## Точка входа атаки `GET /catalog` — публичная страница каталога; канал инъекции — HTTP-заголовок `X-Track-ID`. * **Учётная запись для осмотра магазина:** `demo` / `demo`

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

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

Blind Boolean SQL Injection

Слепая Boolean-based SQL-инъекция через Cookie купона

+90 XP
Go FREE
Exploit Fix
Обложка лабы: SQL Injection: Second-Order (хранимая инъекция) Обложка лабы: SQL Injection: Second-Order (хранимая инъекция)
SQLi

SQL Injection: Second-Order (хранимая инъекция)

Payload сохраняется в БД через безопасный INSERT, но выполняется в другом запросе через конкатенацию строк

+90 XP
Go FREE
Exploit Fix
Обложка лабы: SQL Injection: Обход WAF через mixed case Обложка лабы: SQL Injection: Обход WAF через mixed case
SQLi

SQL Injection: Обход WAF через mixed case

Case-sensitive blacklist SQL keywords обходится через смешанный регистр (uNiOn, sElEcT)

+90 XP
Go FREE
Exploit Fix
Обложка лабы: Union-Based SQL Injection Обложка лабы: Union-Based SQL Injection
SQLi

Union-Based SQL Injection

Получение пароля администратора с использованием UNION SELECT

+60 XP
Go FREE
Exploit Fix