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

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

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

hardnodejsPro
Задача
# SQL Injection: blind через бинарный канал ## Сценарий Перед вами Express + better-sqlite3 приложение интернет-магазина SecureShop. У приложения есть служебный эндпоинт валидации промокодов: пользователь вводит код купона на странице корзины, сервер проверяет его в базе данных и применяет скидку, если код найден. Реализация выглядит безобидно, но имеет ту же фундаментальную ошибку, что и в базовом SQLi: код купона из формы попадает в SQL-запрос **через строковую интерполяцию текста запроса**, без отделения данных от кода. Атакующий может управлять структурой запроса через содержимое поля «код купона». Особенность этой задачи — обработчик **не возвращает** напрямую результат SQL-запроса в ответе. Никакого SELECT'а в response body, никакого error-сообщения с дампом запроса. Сервер либо применяет скидку (если запись найдена), либо нет — и пользователь видит это по результату на странице корзины. Этот односложный «да/нет»-канал и называется **бинарным оракулом**: при правильно сконструированном payload каждый запрос даёт один бит информации (TRUE или FALSE) о состоянии БД. Этого достаточно, чтобы посимвольно извлечь любые данные, к которым у запроса есть доступ — включая пароли других пользователей. В таблице пользователей есть привилегированная учётная запись `admin` с балансом, достаточным для покупки товара «CTF Flag» в каталоге; флаг отображается на странице профиля владельца такого заказа после оформления покупки. ## Цели 1. Найдите параметр в форме применения купона, через который значение из формы попадает в SQL. Подтвердите, что классический SQLi-payload здесь работает: подберите два payload'а — один с условием TRUE, другой с условием FALSE — и убедитесь, что сервер реагирует на них **по-разному**. 2. Через бинарный оракул извлеките пароль пользователя `admin` посимвольно. Это значит — построить семейство payload'ов, в каждом из которых условие проверяет один конкретный символ пароля на одной конкретной позиции, и автоматизировать перебор. 3. Войдите как `admin` с извлечённым паролем; купите «CTF Flag»; заберите CTF-флаг со страницы профиля. ## Данные | Параметр | Значение | |----------|----------| | Обычный пользователь | `demo` / `demo` |

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

Ещё лабораторные по этому типу уязвимости

SQLi

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

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

+90 XP ~75 минут
nodejshardPro
Exploit Fix
SQLi

SQL Injection: WAF Bypass

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

+90 XP ~75 минут
nodejshardPro
Exploit Fix
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru