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

Его функциональность включает:
Этот инструмент написан для пентестеров, которым необходимо проверить надёжность используемых токенов и их подверженность известным атакам. Доступен ряд опций для модификации, подписи и проверки, помогающих глубже изучить потенциальные слабости, присутствующие в некоторых библиотеках JWT.
Он также успешно используется участниками CTF-соревнований — поскольку CTF сейчас проявляют большой интерес к JWT.
Он может быть полезен и разработчикам, которые используют JWT в проектах и хотят проверить стабильность и известные уязвимости при использовании подделанных токенов.
Инструмент написан на Python 3 (версия 3.6+) с использованием распространённых библиотек, однако различные криптографические функции (а также общее удобство и читабельность) требуют установки нескольких распространённых библиотек Python.
(Для тех, кому это нужно, в ветке legacy доступна более старая версия этого инструмента для Python 2.x, хотя она больше не поддерживается и не обновляется)
Предпочтительный способ использования 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
При первом запуске инструмент создаст файл конфигурации, несколько служебных файлов, журнал и набор открытых и закрытых ключей в различных форматах.
jwtconf.ini в качестве значения "jwkloc".Чтобы исправить некорректное отображение цветов в Windows cmd/Powershell: раскомментируйте две строки ниже в jwt_tool.py (удалите "# " в начале каждой строки)
Также потребуется установить colorama: python3 -m pip install colorama
# import colorama
# colorama.init()
Первым аргументом должен быть сам JWT (если только он не передаётся в заголовке или значении cookie). Если не указывать дополнительных аргументов, вы увидите декодированные значения токена для просмотра.
$ 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
Теперь все режимы позволяют отправлять токен напрямую в приложение.
Необходимо указать:
$ 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!).