Брутфорс Формы Входа (Нет Rate Limiting)
Форма входа не ограничивает количество попыток, позволяя подобрать пароль администратора перебором по словарю.
easygolangPro
Задача
# Auth: brute-force формы логина без rate limiting
## Сценарий
Вы аудируете интернет-магазин **SecureShop**. У приложения есть форма логина `/login`, обрабатывающая submit с username и password. Команда уверена, что эндпоинт безопасен — пароли хранятся хешированными (bcrypt), валидация работает корректно. По данным внутреннего аудита, в админ-панели хранится конфиденциальная метка, доступная пользователю с привилегиями admin; её требуется получить.
## Цель
1. Изучите, как форма логина реагирует на серию неверных попыток входа: есть ли прогрессивная задержка, временная блокировка, CAPTCHA, ограничение частоты.
2. Найдите способ автоматизированно проверить набор кандидат-паролей для известного username администратора.
3. Получите admin-сессию и извлеките флаг из админ-панели.
## Теория
Rate limiting на эндпоинте логина — обязательный контроль безопасности для любого приложения, открытого в публичный интернет. Без него атакующий проверяет тысячи паролей в секунду, ограниченный только пропускной способностью сети. Современные коллекции скомпрометированных паролей (rockyou, HIBP, leaked databases) содержат миллиарды записей; даже без них топ-100 распространённых паролей покрывает значительную долю слабых учёток. Admin-аккаунты особенно подвержены риску, потому что многие администраторы выбирают «удобные» пароли (`admin`, `password`, `123456`) или пароли, содержащие имя приложения.
**Уязвимый паттерн (отсутствие защиты):**
```go
// Эндпоинт login обрабатывает любое количество запросов без ограничений
mux.HandleFunc("POST /login", h.Login)
// нет middleware rate limit, нет блокировки, нет задержки, нет CAPTCHA
```
Атака полностью имитирует обычные login-запросы — никаких payload-обходов, только перебор. На сервере без защиты атакующий через `ffuf`, `hydra`, простой Python-скрипт или curl-loop проверяет десятки-сотни паролей за секунду; топ-100 из любого словаря отрабатывает за секунды. После успешного логина — обычная сессия с правами admin-учётной записи.
## Точка входа атаки
| Параметр | Значение |
|----------|----------|
| Эндпоинт логина | `POST /login` (form-encoded `username`, `password`) |
| Целевой пользователь | `admin` (имя известно из публичных конвенций) |
| Привилегированный эндпоинт | `GET /admin` (флаг отображается на странице) |
| Учётные данные обычного пользователя | `demo` / `demo` (для разведки структуры приложения) |