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

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

Предсказуемые Токены Сессии (MD5)

Сессионные токены генерируются через MD5(username), что позволяет предсказать токен администратора и захватить его сессию.

Автор: Hack & Fix
Освоишь: bcrypt/argon2constant-time compareMFA
Средне+60 XP ~35 мин golang
CWE-287 · A07:2021 Pro
Обложка: Предсказуемые Токены Сессии (MD5) Обложка: Предсказуемые Токены Сессии (MD5)
Задача
# Предсказуемые сессионные токены ## Сценарий Вы проводите аудит безопасности **PixelPerk** — интернет-магазина кофе и мерча для удалённых команд, написанного на Go. Приложение идентифицирует пользователя по cookie `session_token`: после входа сервер выдаёт её клиенту и дальше проверяет значение на каждом запросе. Команда уверена, что сессии надёжны: токен выглядит как длинная hex-строка, «неужели это можно подделать?». У вас есть обычная учётная запись — проверьте, можно ли с её помощью оказаться в чужой, административной сессии. ## Цель 1. Изучите формат значения `session_token` после собственного входа: длина, алфавит, изменчивость между входами. 2. Найдите закономерность, связывающую значение токена с данными, которые вам известны о собственной учётной записи. 3. Не зная пароля администратора, вычислите его токен, подмените cookie и извлеките флаг из админ-панели. ## Теория Сессионный токен обязан быть **непредсказуемым**: получив любое число валидных токенов, атакующий не должен суметь вычислить чужой. На практике это значит — генерация криптографически стойким генератором случайных чисел и энтропия не ниже 128 бит. Любая «оптимизация» — токен, производный от имени, идентификатора или времени, — превращает сессию в детерминированную функцию известных данных. **Уязвимый паттерн:** ```go // Токен — детерминированная функция от имени пользователя: hash := md5.Sum([]byte(username)) token := fmt.Sprintf("%x", hash) http.SetCookie(w, &http.Cookie{Name: "session_token", Value: token, Path: "/"}) ``` Атакующий входит собственной учёткой, получает валидный токен и подбирает формулу: перебирает хеш-функции от известных ему данных — имени, идентификатора, почты — пока результат не совпадёт с его токеном. Формула найдена — токен любой учётки вычисляется без пароля, а имя администратора обычно общеизвестно. Ситуацию усугубляют публичные таблицы соответствий: хеши коротких распространённых строк давно выписаны и доступны каждому. ## Точка входа атаки * `POST /login` — форма входа; после успеха браузер получает cookie `session_token`. * **Обычный пользователь:** `demo` / `demo` * **Цель:** `admin` / `???` — пароль не нужен, нужен только его токен. * `GET /admin` — админ-панель с флагом; требует сессию администратора.

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

другие лабы по этой уязвимости
Обложка лабы: Небезопасный Сброс Пароля (IDOR) Обложка лабы: Небезопасный Сброс Пароля (IDOR)
Auth

Небезопасный Сброс Пароля (IDOR)

Форма сброса пароля принимает user_id из клиента, позволяя атакующему сбросить пароль любого пользователя через IDOR.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: JWT: Подбор слабого секретного ключа Обложка лабы: JWT: Подбор слабого секретного ключа
Auth

JWT: Подбор слабого секретного ключа

Приложение подписывает JWT токеном HMAC-SHA256 со слабым ключом. Подбери секрет и подделай токен администратора.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Брутфорс Формы Входа (Нет Rate Limiting) Обложка лабы: Брутфорс Формы Входа (Нет Rate Limiting)
Auth

Брутфорс Формы Входа (Нет Rate Limiting)

Форма входа не ограничивает количество попыток, позволяя подобрать пароль администратора перебором по словарю.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: Слабые Пароли (Нет Валидации Сложности) Обложка лабы: Слабые Пароли (Нет Валидации Сложности)
Auth

Слабые Пароли (Нет Валидации Сложности)

Форма регистрации принимает любые пароли, включая однозначные. Аккаунт admin защищён паролем 'admin'.

+30 XP
Go Pro
Exploit Fix