Перейти к содержимому

Поиск по платформе

Login Bruteforce

Эндпоинт логина не ограничивает количество попыток аутентификации, позволяя атакующему перебирать пароли.

Автор: Hack & Fix
Освоишь: bcrypt/argon2constant-time compareMFA
Легко+30 XP ~20 мин php
CWE-287 · A07:2021 Pro
Обложка: Login Bruteforce Обложка: Login Bruteforce
Задача
# Перебор паролей (Brute Force) на эндпоинте входа ## Сценарий Вы — аудитор безопасности, к которому обратилась компания **«Атлас Системс»** — интегратор корпоративных решений, держащий внутренний магазин подарков и мерча для сотрудников и партнёров. За последнюю неделю их инженер мониторинга трижды зафиксировал в журналах всплески неудачных попыток входа в учётную запись администратора — похоже, кто-то уже примеривается к паролю. Заказчик просит оценить, способен ли механизм входа сопротивляться перебору и как быстро атакующий со словарём доберётся до чужого аккаунта. ## Цель 1. Убедитесь, что сервер принимает неограниченное число неудачных попыток входа подряд — без задержек, блокировок и изменения ответа. 2. Автоматизируйте словаревой перебор и подберите пароль учётной записи администратора. 3. Войдите как администратор, купите товар «CTF Flag» — флаг появится на странице профиля. ## Теория Аутентификация по паролю опирается на предположение, что подбор займёт неприемлемо долгое время. Это справедливо только тогда, когда сервер ограничивает частоту попыток: считает неудачи, замедляет или блокирует повторения. Если же эндпоинт входа обрабатывает каждый запрос изолированно, скорость перебора ограничена лишь каналом атакующего, а словарный пароль находится за минуты: утечки отсортированы по популярности, и типичный корпоративный пароль стоит в первых строчках таких подборок. Уязвимый паттерн: ```php $username = $_POST['username'] ?? ''; $password = $_POST['password'] ?? ''; $stmt = $db->prepare('SELECT id, password FROM users WHERE username = ?'); ``` Атакующий автоматизирует отправку формы: перебирает пароли из словаря и по ответу сервера отличает неудачу от успеха. Сообщение об ошибке здесь одинаково для несуществующего пользователя и для неверного пароля — это правильно, но без лимита попыток перебор не замедляет. ## Точка входа атаки Форма входа: `GET /login`; аутентификация: `POST /login` с полями `username` и `password`. * **Демо-аккаунт:** `demo / demo` * **Целевая учётная запись:** `admin / ???` — пароль неизвестен, его и предстоит подобрать

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: Weak Password Policy Обложка лабы: Weak Password Policy
Auth

Weak Password Policy

Регистрация принимает любой пароль без проверки сложности, что позволяет dictionary attack на аккаунты.

+30 XP
PHP Pro
Exploit Fix
Обложка лабы: JWT: Weak Secret Обложка лабы: JWT: Weak Secret
Auth

JWT: Weak Secret

JWT подписан слабым секретом — подберите его через brute-force и подделайте токен администратора.

+30 XP
PHP Pro
Exploit Fix
Обложка лабы: Timing-атака на форму входа (PHP) Обложка лабы: Timing-атака на форму входа (PHP)
Auth

Timing-атака на форму входа (PHP)

Обработчик входа раскрывает существование пользователей через разницу во времени ответа — bcrypt вызывается только для существующих аккаунтов.

+60 XP
PHP Pro
Exploit Fix
Обложка лабы: JWT: None Algorithm Attack Обложка лабы: JWT: None Algorithm Attack
Auth

JWT: None Algorithm Attack

Сервер принимает JWT с алгоритмом none — подделайте токен без подписи и получите права администратора.

+60 XP
PHP Pro
Exploit Fix