jwt_tool

Exploitation v2.3.0 · 01.05.2025 >1 года

Инструмент для тестирования, подделки и взлома JSON Web Tokens: проверяет уязвимые реализации (alg=none, слабый секрет, path traversal в jku/kid), автоматизирует типовые атаки на JWT и брутфорсит HMAC-секреты. Практически обязательный инструмент при пентесте любого современного API.

v2.3.0
01.05.2025 current
Добавлен 27.07.2026 · Обновлён 27.07.2026 · Exploitation
Установка
git clone https://github.com/ticarpi/jwt_tool.git
cd jwt_tool
pip install -r requirements.txt

python3 jwt_tool.py <JWT> -T     # интерактивное тестирование токена
python3 jwt_tool.py <JWT> -X a   # атака alg=none
переведено ИИ

Инструментарий для работы с JSON Web Tokens v2

jwt_tool.py — это набор инструментов для проверки, подделки, сканирования и модификации JWT (JSON Web Tokens).

версия jwt_tool версия python

логотип

Его функциональность включает: * Проверка валидности токена * Тестирование на известные эксплойты: * (CVE-2015-2951) Уязвимость обхода подписи alg=none * (CVE-2016-10555) Уязвимость несоответствия открытого ключа RS/HS256 * (CVE-2018-0114) Уязвимость внедрения ключа * (CVE-2019-20933/CVE-2020-28637) Уязвимость пустого пароля * (CVE-2020-28042) Уязвимость нулевой подписи * (CVE-2022-21449) Уязвимость ECDSA Psychic Signature * Сканирование на неправильную конфигурацию или известные слабости * Фаззинг значений claims для вызова неожиданного поведения * Проверка валидности файла секрета/ключа/открытого ключа/JWKS-ключа * Выявление слабых ключей с помощью высокоскоростной атаки по словарю * Создание новой структуры заголовка и полезной нагрузки токена и формирование новой подписи с помощью ключа или через другой метод атаки * Модификация временных меток * Генерация и восстановление ключей RSA и ECDSA (из JWKS-файлов) * Ограничение частоты для всех атак * ...и многое другое!


Аудитория

Этот инструмент написан для пентестеров, которым нужно проверить прочность используемых токенов и их уязвимость к известным атакам. Доступен ряд опций для модификации, подписи и проверки, чтобы глубже изучить потенциальные слабости в некоторых JWT-библиотеках. Он также успешно используется участниками CTF-соревнований, поскольку в настоящее время JWT часто являются темой CTF. Он также может быть полезен разработчикам, которые используют JWT в своих проектах, но хотят проверить стабильность и уязвимости к известным уязвимостям при использовании поддельных токенов.


Требования

Этот инструмент написан нативно на Python 3 (версия 3.6+) с использованием стандартных библиотек, однако различные криптографические функции (и общая эстетичность/читаемость) требуют установки нескольких распространенных Python-библиотек. (Старая версия для Python 2.x доступна в ветке legacy для тех, кому это необходимо, хотя она больше не поддерживается и не обновляется)


Установка

Docker

Предпочтительный способ использования jwt_tool — через официальный образ Docker для jwt_tool, размещенный на Dockerhub. Базовая команда для запуска выглядит следующим образом: Базовая команда для запуска jwt_tool: docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool

Используя приведенную выше команду, вы можете добавлять любые другие аргументы как обычно. Обратите внимание, что локальные файлы в вашей текущей рабочей директории будут отображены в директорию /tmp контейнера Docker, поэтому вы можете использовать их по этому абсолютному пути в ваших аргументах. Например: /tmp/localfile.txt

Ручная установка

Установка заключается в скачивании файла jwt_tool.py (или выполнении git clone репозитория). (Также выполните chmod для файла, если вы хотите добавить его в $PATH и вызывать из любого места.)

$ git clone https://github.com/ticarpi/jwt_tool $ python3 -m pip install -r requirements.txt

При первом запуске инструмент сгенерирует файл конфигурации, некоторые вспомогательные файлы, файл журнала и набор открытых и закрытых ключей в различных форматах.

Пользовательские конфигурации

  • Чтобы лучше использовать опции сканирования, настоятельно рекомендуется скопировать сгенерированный пользовательский JWKS-файл в место, к которому можно обращаться удаленно по URL. Этот адрес затем должен быть сохранен в jwtconf.ini как значение "jwkloc".
  • Чтобы перехватывать взаимодействия с внешними сервисами, такие как DNS-запросы и HTTP-запросы, поместите ваш уникальный адрес Burp Collaborator (или другой альтернативный инструмент, например RequestBin) в файл конфигурации как значение "httplistener". Просмотрите другие опции в файле конфигурации, чтобы настроить инструмент под себя.

Исправление цвета в Windows

Чтобы исправить сломанные цвета в cmd/Powershell Windows: раскомментируйте две строки ниже в jwt_tool.py (удалите "# " в начале каждой строки). Вам также потребуется установить colorama: python3 -m pip install colorama

# import colorama
# colorama.init()

Использование

Первым аргументом должен быть сам JWT (если только он не передается через заголовок или значение куки). Если не предоставлять дополнительных аргументов, вам будут показаны декодированные значения токена для просмотра. $ python3 jwt_tool.py <JWT> или базовая команда Docker: $ docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool

Инструментарий проверит токен и выведет значения заголовка и полезной нагрузки.

Дополнительные аргументы

Множество дополнительных аргументов позволят вам перейти к соответствующей функции и получить токен, готовый к использованию в ваших тестах. Например, чтобы модифицировать существующий токен, выполните следующую команду: $ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T

Для многих опций требуются дополнительные значения для настройки параметров. Например, чтобы запустить определенный тип эксплойта, вам нужно выбрать опцию eXploit (-X) и указать уязвимость (здесь используется "a" для эксплойта alg:none): $ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a

Дополнительные параметры

Для некоторых опций, таких как проверка токенов, необходимо предоставить дополнительные параметры/файлы (здесь предоставляется открытый ключ в формате PEM): $ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -V -pk public.pem

Отправка токенов в веб-приложение

Все режимы теперь позволяют отправлять токен напрямую в приложение. Вам нужно указать: * целевой URL (-t) * вместо целевого URL вы можете поместить ваш HTTP-запрос в файл и сослаться на файл с помощью -r. Это АВТОМАТИЧЕСКИ заполняет заголовки, куки и данные POST, поэтому это рекомендуемый вариант * заголовок запроса (-rh) или куки запроса (-rc), которые требуются приложению (как минимум один из них должен содержать токен) * (опционально) любые данные POST (если запрос является POST) * (опционально) любые дополнительные опции jwt_tool, такие как режимы или опции модификации/внедрения * (опционально) значение «канарейки» (-cv) — текстовое значение, которое вы ожидаете увидеть при успешном использовании токена (например, "Welcome, ticarpi"). Пример запроса может выглядеть следующим образом (используя режим сканирования для forced-errors): $ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M er

Отображаются различные ответы на запрос: * Код ответа * Размер ответа * Уникальный идентификатор отслеживания запросов (для использования в журналах) * Используемый режим/опции


Типичный рабочий процесс

Вот краткий обзор базовой оценки реализации JWT. Если эти опции не привели к успеху, углубитесь в другие режимы и опции, чтобы обнаружить новые уязвимости (или zero-day!).

Разведка:

Прочитайте значение токена, чтобы получить представление о claims/значениях, ожидаемых в приложении: $ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw

Сканирование:

Запустите Playbook Scan, используя предоставленный токен напрямую против приложения, чтобы выявить распространенные ошибки конфигурации: $ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -M pb

Эксплуатация:

Если обнаружены какие-либо успешные уязвимости, измените соответствующие claims, чтобы попробовать их эксплуатировать (здесь используется эксплойт Inject JWKS и внедряется новое имя пользователя): $ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -X i -I -pc name -pv admin

Фаззинг:

Углубитесь, тестируя неожиданные значения и claims, чтобы выявить непредвиденное поведение приложения, или проводите атаки на логику программирования или обработку токенов: $ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -I -hc kid -hv custom_sqli_vectors.txt

Просмотр:

Просмотрите результаты любой успешной эксплуатации, запрашивая журналы для чтения дополнительных данных о запросе и: $ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -X i -I -pc name -pv admin


Справка

Для списка опций вызовите функцию использования: Некоторые опции, такие как верификация токенов, требуют предоставления дополнительных параметров/файлов:
$ python3 jwt_tool.py -h

Более подробное руководство пользователя можно найти на странице вики.


Чекбук по атакам на JWT — новое содержание в вики!

playbook_logo

Перейдите к Чекбуку по атакам на JWT, чтобы получить подробное описание: что такое JWT, для чего они используются, а также полный рабочий процесс их всестороннего тестирования на наличие уязвимостей, распространенных слабостей и непреднамеренных ошибок в коде.


Советы

Регулярное выражение для поиска JWT в Burp Search
(убедитесь, что отмечены опции 'Case sensitive' и 'Regex')
[= ]eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9._-]* - JWT версия, безопасная для URL
[= ]eyJ[A-Za-z0-9_\/+-]*\.[A-Za-z0-9._\/+-]* - все версии JWT (выше вероятность ложных срабатываний)


Дополнительные материалы

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Этот набор инструментов решит большинство упражнений Pentesterlab по JWT за несколько секунд при правильном использовании, однако я бы настойчиво рекомендовал вам самостоятельно проработать эти упражнения, разобрав структуру и слабости. В конце концов, речь идет о обучении...

Комментарии
Войдите, чтобы оставить комментарий