SQL Injection (Auth Bypass)
Обход авторизации с использованием SQL Injection
easygolang
Задача
# SQL Injection (Обход аутентификации)
## Сценарий
Вы проводите аудит безопасности **SecureShop** — внутреннего магазина компании, построенного на Go. Команда разработки утверждает, что механизм входа безопасен, однако автоматический сканер выявил подозрительное поведение при обработке спецсимволов в форме логина.
## Цель
1. Обойдите механизм аутентификации с помощью SQL-инъекции.
2. Войдите как пользователь **admin**, не зная его пароля.
3. Купите секретный товар **CTF Flag**, чтобы получить флаг.
## Теория
SQL-инъекция возникает, когда приложение формирует SQL-запросы путём прямой подстановки пользовательского ввода в строку запроса. Это позволяет атакующему изменить логику запроса.
**Уязвимый паттерн:**
```go
// Конкатенация SQL-запроса из пользовательского ввода:
query := "SELECT id FROM users WHERE username='" + u + "' AND password='" + p + "'"
```
Атакующий может использовать символ `'` для выхода из строкового контекста, а `--` — для комментирования оставшейся части запроса (например, проверки пароля).
## Точка входа атаки
`POST /login` — форма входа с полями `username` и `password`.
* **Обычный пользователь:** `demo` / `demo`
* **Администратор:** `admin` / `???`