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

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

SQL Injection: Boolean-based Blind (Node.js)

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

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

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

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

SQL Injection: Second-Order через сохранённый username профиля

Second-order SQL injection: вредоносный username безопасно сохраняется при регистрации, но выполняется как часть SQL позже, когда обработчик профиля собирает запрос истории заказов конкатенацией.

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

SQL Injection: WAF Bypass

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

+90 XP
Node.js Pro
Exploit Fix
Обложка лабы: SQL Injection: UNION SELECT через поиск каталога Обложка лабы: SQL Injection: UNION SELECT через поиск каталога
SQLi

SQL Injection: UNION SELECT через поиск каталога

Извлечение данных из таблицы users через UNION-based SQL injection в поиске каталога Express-приложения.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: SQL Injection: Обход аутентификации в Express Обложка лабы: SQL Injection: Обход аутентификации в Express
SQLi

SQL Injection: Обход аутентификации в Express

Обход аутентификации через классическую SQL-инъекцию в форме логина Express + better-sqlite3.

+30 XP
Node.js Pro
Exploit Fix