На одном из CTF я потратил 40 минут на веб-задачу — перебирал эндпоинты, пробовал SQLi, ковырял параметры. А решение уместилось в три символа:
none в поле alg JWT-заголовка и пустая подпись. Флаг пришёл мгновенно.JWT — это строка из трёх частей через точку: header.payload.signature. Header говорит серверу, каким алгоритмом проверять подпись. Payload хранит данные о пользователе в открытом виде — никакого шифрования, просто base64url. Signature гарантирует, что никто не подменил содержимое. В теории.
На практике разработчики допускают ошибки в валидации, и вот три атаки, которые чаще всего встречаются в CTF:
🔓 1. alg:none — самая простая и самая недооценённая. Меняем алгоритм в header на
"alg":"none", правим payload (например, "role":"admin"), убираем подпись, оставив финальную точку. Если сервер не проверяет алгоритм строго, он примет токен без подписи вообще. В jwt_tool это одна команда: python3 jwt_tool.py TOKEN -X a.🔑 2. Брутфорс слабого секрета. Алгоритм HS256 использует один симметричный ключ для подписи и проверки. Если разработчик поставил пароль вроде
secret, password123 или qwerty — его можно подобрать за секунды. hashcat с режимом 16500 и словарём rockyou.txt перебирает миллионы вариантов в секунду на GPU. Нашёл ключ — подписываешь любой payload и заходишь как admin.⚡ 3. Algorithm confusion — уровень посложнее. Сервер ожидает RS256 (асимметричная пара ключей), но атакующий переключает заголовок на HS256 и подписывает токен публичным ключом сервера как HMAC-секретом. Публичный ключ часто доступен — через
/jwks.json или в исходниках. Сервер берёт тот же ключ для проверки и... подпись совпадает.Где искать токен в задаче? Четыре места:
• Cookie — самый частый вариант (названия:
jwt, token, session)• Заголовок
Authorization: Bearer ...• Тело JSON-ответа после логина
•
localStorage в DevTools для SPA-приложенийПрактический алгоритм на CTF: нашёл токен → декодировал header и payload → посмотрел
alg → попробовал none → не сработало — запустил брутфорс секрета → проверил algorithm confusion. Три шага, которые закрывают 80% JWT-задач на соревнованиях.По классификации OWASP, эти уязвимости попадают сразу под три категории Top 10: Broken Access Control, Cryptographic Failures и Security Misconfiguration. Не только CTF — реальные CVE тоже.
Полный разбор с командами и примерами — в статье на HackerLab.
https://hackerlab.pro/blog/jwt-ataki-ctf-ot-struktury-tokena-do-zahvata-flaga-cherez-alg-none-i-slabyy-sekret
