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

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

JWT: None Algorithm Attack

Сервер принимает JWT с alg:none и доверяет роли из claims — подделайте токен для получения прав администратора.

Автор: Hack & Fix
Освоишь: bcrypt/argon2constant-time compareMFA
Средне+60 XP ~35 мин python
CWE-287 · A07:2021 Pro
Обложка: JWT: None Algorithm Attack Обложка: JWT: None Algorithm Attack
Задача
# JWT (подделка токена через алгоритм подписи) ## Сценарий Вы — пентестер, приглашённый в «МебельЛофт» — магазин мебели ручной работы, где недавно сменили команду разработки. Новая команда перевела аутентификацию магазина с серверных сессий на JWT-токены и гордится современным стеком, но основатель, наслушавшись историй о подделке токенов, заказал независимую проверку до запуска программы лояльности. ## Цель 1. Войдите как обычный покупатель и изучите токен в cookie приложения. 2. Разберите структуру токена: как сервер выбирает алгоритм проверки и откуда берёт роль пользователя. 3. Сформируйте токен, который сервер примет без знания секрета подписи и который даёт административные права. 4. Откройте административную панель и извлеките флаг. ## Теория JWT состоит из трёх частей: заголовок, полезная нагрузка, подпись. Заголовок называет алгоритм подписи — и здесь ловушка: если сервер доверяет этому полю и допускает среди алгоритмов режим «без подписи», атакующий собирает токен самостоятельно, оставляя подпись пустой. Вторая опора атаки — доверие полям нагрузки: роль пользователя читается из токена, а не из серверного хранилища, поэтому её можно вписать любую. **Уязвимый паттерн:** ```python decoded = pyjwt.decode(token, JWT_SECRET, algorithms=...) user['role'] = decoded.get('role', user['role']) ``` Список допустимых алгоритмов на сервере слишком широк, а для «безподписного» режима проверка подписи пропускается вовсе. Контроль над содержимым токена полностью переходит к клиенту. ## Точка входа атаки Токен выдаётся в cookie `token` после входа через `POST /login` (поля `username`, `password`). Административная панель — `GET /admin`. * **Обычный покупатель:** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: Timing-атака на форму входа Обложка лабы: Timing-атака на форму входа
Auth

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

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

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

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

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

+30 XP
Python Pro
Exploit Fix
Обложка лабы: Слабая Парольная Политика Обложка лабы: Слабая Парольная Политика
Auth

Слабая Парольная Политика

Регистрация принимает любой пароль без проверки сложности. Пароль администратора — 'admin'.

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

JWT: Weak Secret

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

+30 XP
Python Pro
Exploit Fix