API Rate Limit: Brute-force логина без ограничений
Отсутствие rate limiting на эндпоинте логина позволяет brute-force пароля администратора.
mediumgolangPro
Задача
# API: Brute-force через отсутствие rate limiting на login
## Сценарий
Вы аудируете JSON API интернет-магазина **SecureShop**. У приложения есть API-эндпоинт аутентификации: пользователь отправляет логин и пароль через `POST /api/login`, получает сессию. Команда уверена, что эндпоинт безопасен — пароли хранятся хешированными, неверные попытки возвращают 401, а паролей администраторов вне внутренней сети никто не знает. По данным внутреннего аудита, доступ к API-эндпоинту получения служебной метки требует admin-сессии — её требуется получить.
## Цель
1. Изучите эндпоинт аутентификации API и его поведение при неверных попытках входа: есть ли задержка, ограничение частоты, блокировка аккаунта, CAPTCHA.
2. Найдите способ получить admin-сессию, не зная пароля заранее, через свойства поведения эндпоинта при многократных запросах.
3. Используя полученную сессию, обратитесь к admin-API и извлеките флаг.
## Теория
Rate limiting (ограничение частоты запросов) — критический контроль безопасности для эндпоинтов аутентификации. Без него атакующий может перебирать пароли с максимальной скоростью, ограниченной только пропускной способностью сети. Современные коллекции скомпрометированных паролей (rockyou, Have I Been Pwned, leaked password databases) содержат миллиарды известных паролей; даже без таких словарей топ-100 паролей покрывает значительную долю реальных аккаунтов. Пароль администратора, выбранный «для удобства» (`admin`, `password`, `admin123`) — типичный кандидат для попадания в словарь.
**Уязвимый паттерн (отсутствие защиты):**
```go
// Эндпоинт login обрабатывает любое количество запросов без ограничений
mux.Handle("POST /api/login", http.HandlerFunc(h.APILogin))
// нет middleware rate limit, нет блокировки, нет CAPTCHA, нет задержки
```
Атака полностью имитирует обычные запросы аутентификации — никаких payload-обходов, только перебор. На современном сервере без защиты атакующий проверяет тысячи паролей в секунду; топ-100 из любого словаря отрабатывает за миллисекунды. После успешного логина — обычная сессия с правами admin-учётной записи.
## Точка входа атаки
| Параметр | Значение |
|----------|----------|
| Эндпоинт логина | `POST /api/login` (параметры `username`, `password`) |
| Целевой пользователь | `admin` (пароль из стандартного словаря) |
| Эндпоинт получения флага | `GET /api/admin/flag` (требует admin-сессии) |