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

Blind Boolean SQL Injection

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

hardgolang
Задача
# Boolean-based Blind SQL Injection (Дамп секрета через купон) ## Сценарий Вы проводите аудит безопасности интернет-магазина **SecureShop**. Функционал корзины позволяет применять промокоды. Вы заметили: если ввести спецсимволы в поле купона, видимых ошибок нет — но скидка то появляется, то исчезает в зависимости от вводимого значения. Это классический признак **Blind SQL Injection** с булевым оракулом. ## Цель 1. Подтвердите уязвимость с помощью логических выражений (`1=1` и `1=0`). 2. Определите длину целевой строки в БД через `length()`. 3. Напишите скрипт для посимвольного перебора значения. 4. Получите флаг — он хранится в строке таблицы `secrets` со значением ключа `flag`. ## Теория **Blind Boolean SQLi** возникает, когда приложение не возвращает данные из БД и не показывает тексты ошибок, но по-разному реагирует на истинные (TRUE) и ложные (FALSE) SQL-запросы. В данном случае: - **TRUE:** скидка применяется (в ответе виден текст «Discount»). - **FALSE:** скидка не применяется (итог в корзине без скидки). Это поведение используется как **оракул** — приложению задаются булевы вопросы вида *«Начинается ли секрет на букву "f"?»* и по наличию/отсутствию скидки определяется ответ. **Уязвимый паттерн:** ```go // Значение купона из cookie напрямую конкатенируется в SQL-запрос: query := fmt.Sprintf("SELECT discount FROM coupons WHERE code='%s'", appliedCoupon) err := h.db.QueryRow(query).Scan(&d) ``` ## Точка входа атаки ``` POST /cart Cookie: applied_coupon=<payload> ``` - **Учётные данные:** `demo` / `demo` - **Рабочий купон:** `WELCOME2024` (используйте как основу для payload)
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru