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

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

JWT: None Algorithm Attack

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

Автор: Hack & Fix
Освоишь: bcrypt/argon2constant-time compareMFA
Средне+60 XP ~35 мин php
CWE-287 · A07:2021 Pro
Обложка: JWT: None Algorithm Attack Обложка: JWT: None Algorithm Attack
Задача
# Подделка JWT: приём токена без подписи ## Сценарий «МамонтЧай» — сеть чайных магазинов с онлайн-витриной. Технический директор Наиль Зарипов перевёл авторизацию магазина с серверных сессий на JWT-токены: после входа сервер подписывает токен секретом и отдаёт клиенту в cookie, а каждый запрос авторизуется по полезной нагрузке токена. Перед релизом Наиль просит вас проверить верификацию: он уверен, что без секрета токен подделать невозможно. ## Цель 1. Войдите обычным пользователем и изучите выданный токен: заголовок, полезная нагрузка и подпись — три сегмента в URL-безопасной кодировке, разделённые точками. 2. Соберите токен, который сервер принимает без знания секрета: с правами администратора и без проверки подписи. 3. Подмените токен в cookie, откройте админ-панель и заберите флаг. ## Теория JWT состоит из заголовка, полезной нагрузки и подписи. В заголовке заявляется алгоритм подписи, и если верификатор сервера следует этому заявлению, возникает люфт: в стандарте исторически есть режим «токен без подписи», при котором третья часть отсутствует, а проверка не выполняется. Ветвь, доверяющая такому режиму, превращает подпись в декларацию: содержимое токена контролирует клиент. **Уязвимый паттерн:** ```php $alg = strtolower($header['alg'] ?? ''); // VULNERABILITY: accepts "none" algorithm — no signature verification if ($alg === 'none') { ``` Механика атаки: атакующий декодирует свой честный токен, собирает новый — с тем же идентификатором пользователя, но с ролью администратора и заявленным режимом без подписи — и оставляет сегмент подписи пустым. Сервер попадает в ветвь без проверки, а роль берёт прямо из полезной нагрузки, поэтому подменённый токен открывает административные страницы. ## Точка входа атаки `POST /login` — форма входа, поля `username`, `password`; при успехе сервер устанавливает cookie `token`. `GET /admin` — админ-панель; авторизованному администратору страница показывает флаг. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** `admin` / `???`

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

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

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

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

+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