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

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

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

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

Автор: Hack & Fix
Освоишь: bcrypt/argon2constant-time compareMFA
Средне+60 XP ~35 мин php
CWE-287 · A07:2021 Pro
Обложка: Timing-атака на форму входа (PHP) Обложка: Timing-атака на форму входа (PHP)
Задача
# Перечисление пользователей через timing-атака ## Сценарий «Спортград» — интернет-магазин спортивного питания и инвентаря. Руководитель службы безопасности Регина Дьякова пригласила вас на аудит после целевой фишинговой рассылки по клиентам: перед атакой кто-то явно знал, у кого есть аккаунты. Команда разработки уверена, что единый текст ошибки входа надёжно скрывает существование учётных записей, и Регина просит проверить это утверждение по всем наблюдаемым каналам, а не только по телу ответа. ## Цель 1. Сравните поведение формы входа для несуществующего имени и для существующего с неверным паролем: текст, статус и время ответа. 2. Через побочный канал времени определите, какие имена из проверяемого списка реально зарегистрированы; подтвердите наличие учётной записи `admin`. 3. Войдите администратором и получите флаг со страницы админ-панели. ## Теория Единое сообщение «неверные данные» защищает только от чтения ответа. Если путь обработки зависит от существования учётной записи, время ответа становится оракулом: проверка пароля — дорогостоящая криптографическая операция, и когда она пропускается, ответ заметно ускоряется. Атакующий не видит разницы в тексте, но стабильно видит её в задержке. **Уязвимый паттерн:** ```php // VULNERABILITY: timing side-channel. // Для несуществующего пользователя возвращаем ошибку сразу (≈1мс). if (!$row) { ``` Механика атаки: отправляется серия запросов входа с одним и тем же заведомо неверным паролем, но разными именами; каждый сценарий повторяется десятки раз, чтобы сетевой шум не исказил картину. Имена, для которых медианная задержка оказывается устойчиво выше, принадлежат существующим учётным записям — список пользователей извлекается без единого отличия в тексте ответов. ## Точка входа атаки `POST /login` — форма входа, поля `username`, `password`. `GET /admin` — админ-панель; авторизованному администратору страница показывает флаг. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** `admin` / `???`

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

другие лабы по этой уязвимости
Обложка лабы: JWT: None Algorithm Attack Обложка лабы: JWT: None Algorithm Attack
Auth

JWT: None Algorithm Attack

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

+60 XP
PHP Pro
Exploit Fix
Обложка лабы: Login Bruteforce Обложка лабы: Login Bruteforce
Auth

Login Bruteforce

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

+30 XP
PHP Pro
Exploit Fix
Обложка лабы: 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