Веб-версияОткрыть в Telegram

ПостТри символа, которые ломают авторизацию: как JWT-атаки решают CTF-задачи

24 июня 2026
Б
Блог Сергея Попова
Фотография
нажмите — покажем
Три символа, которые ломают авторизацию: как JWT-атаки решают CTF-задачи На одном из 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
20 · 1.5K ·

Рядом в ленте

ББлог Сергея ПоповаПять команд в терминале вместо двадцати минут в Wireshark: как решать network-таски на CTF Пока кто-то кликает по меню Statistics → Protocol Hierarchy в графичеББлог Сергея Попова🔍 Неделя 4 — Финал: Секретный кабинет Последняя неделя серии «Сетевая разведка за 30 дней» — и сразу 500 очков. Маршрут к цели известен. Нужен пароль. Всё, что
это сообщение
ББлог Сергея ПоповаПустая страница Apache — и четыре минуты до флага Представьте: вы подключаетесь к тренировочной машине на HackTheBox. Nmap показал единственный открытый порт 80ББлог Сергея ПоповаПавел Никитин, один из авторов курса, пятикратный победитель The Standoff и специалист с многолетним опытом в Red Team и коммерческих пентестах, рассказывает, к
ББлог Сергея ПоповаБлог Сергея Попова@sergey_codeby · канал
177подписчиков289средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем