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

Time-Based Blind SQL Injection

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

hardgolang
Задача
# Time-based Blind SQL Injection (Дамп секретов через timing-канал) ## Сценарий Вы проводите аудит безопасности интернет-магазина **SecureShop**. Анализируя трафик, вы заметили нестандартный HTTP-заголовок `X-Track-ID`, который браузер отправляет при запросе каталога товаров. Заголовок обрабатывается внутренней системой аналитики и сохраняется в БД. Сервер **никогда** не возвращает данные, связанные с этим заголовком, и не выводит ошибки SQL — обычный response остаётся одинаковым. База данных — **SQLite**. ## Цель 1. Обнаружить уязвимость, искусственно увеличив время ответа сервера (Time-based detection). 2. Подобрать «тяжёлый» подзапрос нужного веса, чтобы задержка стабильно превышала ~2 секунды. 3. Написать скрипт, который посимвольно извлечёт целевую строку из БД, ориентируясь исключительно на время ответа. 4. Получить флаг — он хранится в строке таблицы `secrets` со значением ключа `flag`. ## Теория **Time-based Blind SQL Injection** применяется, когда приложение не возвращает никаких данных и не показывает ошибки, но выполняет SQL-запросы синхронно. Единственный канал связи с базой данных — **время ответа**. Идея: задаём базе вопрос — «Если первая буква секрета `f`, подожди 2 секунды». - Сервер завис на 2 секунды → ответ **TRUE**. - Сервер ответил мгновенно → ответ **FALSE**. **Специфика SQLite:** функции `SLEEP()` нет. Вместо неё используются «тяжёлые» подзапросы, нагружающие CPU/IO — выделение случайных байт через `randomblob()`: ```sql SELECT count(hex(randomblob(100000000))) ``` **Уязвимый паттерн:** ```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) h.db.Exec(query) ``` ## Точка входа атаки * **Эндпоинт:** `GET /catalog` * **Канал инъекции:** HTTP-заголовок `X-Track-ID` * **Метод подтверждения:** измерение времени ответа
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru