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

SQL Injection: Auth Bypass

Обход авторизации через SQL-инъекцию в форме логина Flask-приложения.

easypythonPro
Задача
# SQL Injection: обход авторизации через форму входа ## Сценарий Перед вами Flask-приложение интернет-магазина SecureShop. Приложение использует SQLite для хранения учётных записей и каталога товаров. На странице входа форма с полями username/password — типовая авторизация. Реализация выглядит безобидно, но имеет фундаментальную ошибку, к которой склонны разработчики, начинавшие путь до распространения параметризованных запросов: значения из формы попадают в SQL-запрос **через строковую интерполяцию текста запроса**, без отделения данных от кода. Это даёт атакующему возможность управлять структурой запроса через содержимое полей формы — классический SQL Injection в auth-эндпоинте. В таблице пользователей есть привилегированная учётная запись `admin` с балансом, достаточным для покупки товара «CTF Flag» в каталоге; флаг отображается на странице профиля владельца такого заказа после оформления покупки. ## Цели 1. Подтвердите, что в форме входа значения полей попадают в SQL-запрос **как часть SQL-синтаксиса**, а не как данные. Простейший детектор — символ-кавычка в username, ожидаемая реакция — серверная ошибка SQL. 2. Обойдите проверку пароля и войдите как `admin`, **не зная** его пароля. 3. После входа из-под admin'а добавьте товар «CTF Flag» в корзину, оформите покупку, и заберите CTF-флаг со страницы профиля. ## Данные | Параметр | Значение | |----------|----------| | Обычный пользователь | `demo` / `demo` | | Целевая учётная запись | `admin` (пароль не известен — его не нужно угадывать) |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru