Слабые Пароли (Нет Валидации Сложности)
Форма регистрации принимает любые пароли, включая однозначные. Аккаунт admin защищён паролем 'admin'.
easygolangPro
Задача
# Auth: слабые пароли (отсутствие политики сложности)
## Сценарий
Вы аудируете интернет-магазин **SecureShop**. У приложения есть форма регистрации `/register`, открытая для любого пользователя. Команда уверена, что подсистема аутентификации безопасна — пароли хешируются bcrypt с разумной стоимостью, в БД хранятся только хеши. По данным внутреннего аудита, в админ-панели хранится конфиденциальная метка, доступная только пользователю с привилегиями admin; её требуется получить.
## Цель
1. Изучите, какие требования к паролю предъявляет форма регистрации: есть ли валидация длины, состава символов, проверка по deny-list.
2. Определите, есть ли в системе учётные записи со слабыми паролями, либо самостоятельно зарегистрируйте такую (для подтверждения класса уязвимости).
3. Получите admin-сессию через атаку по словарю и извлеките флаг из админ-панели.
## Теория
Политика сложности паролей — базовый контроль безопасности на стороне приложения. Без неё пользователи (включая администраторов) свободно выбирают «удобные» пароли: имя сервиса, имя учётки, простые числовые последовательности, ключевые слова из топ-100 распространённых паролей. Хеширование bcrypt замедляет offline-перебор хешей, но **не помогает** против online-перебора через login-эндпоинт: словарная атака на форму логина с топ-словарём отрабатывает за секунды независимо от стоимости bcrypt.
**Уязвимый паттерн (отсутствие проверки):**
```go
// Регистрация принимает любой непустой пароль — нет требований к длине/составу
if password == "" {
http.Error(w, "Password is required", 400); return
}
hash, _ := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
db.Exec("INSERT INTO users (..., password) VALUES (...)", ..., hash)
```
Атака на admin-аккаунт со слабым паролем — комбинация: (1) знание имени admin-учётки (часто `admin`, `administrator`, или раскрывается через публичные эндпоинты), (2) короткий словарь распространённых паролей (`rockyou top-1000`, явные кандидаты типа `admin`/`password`/`123456`). При отсутствии rate-limiting (часто соседствует с этой уязвимостью) перебор занимает секунды.
## Точка входа атаки
| Параметр | Значение |
|----------|----------|
| Эндпоинт логина | `POST /login` |
| Цель | `admin` (имя из публичных конвенций) |
| Эндпоинт регистрации (для разведки/демонстрации) | `POST /register` |
| Привилегированный эндпоинт | `GET /admin` (флаг отображается в Admin Panel) |
| Учётные данные обычного пользователя | `demo` / `demo` |