Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
jwt_tool — :snake: Инструментарий для тестирования, модификации и взлома JSON Web Tokens | Kitploit
Инструменты/GitHubGitHub/ticarpi/jwt_tool
Сканеры уязвимостейВеб-безопасностьФаззингКриптографияCTFТестирование на Проникновение
GitHubticarpi/jwt_tool

jwt_tool

🐍 Инструментарий для тестирования, модификации и взлома JSON Web Tokens

Репозиторий
6.7k8121 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Инструментарий JSON Web Token v2

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

jwt_tool version python version

logo

Его функциональность включает:

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

Аудитория

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


Требования

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


Установка

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

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

root@kitploit:~
# 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

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

Теперь все режимы позволяют отправлять токен напрямую в приложение.
Необходимо указать:

  • целевой URL (-t)
  • вместо целевого URL можно поместить ваш HTTP-запрос в файл и указать его с помощью -r. При этом заголовки, cookie и POST-данные заполняются АВТОМАТИЧЕСКИ, поэтому этот вариант рекомендуется
  • заголовок запроса (-rh) или cookie запроса (-rc), необходимые приложению (хотя бы одно из них должно содержать токен)
  • (необязательно) любые POST-данные (если запрос является POST)
  • (необязательно) любые дополнительные опции jwt_tool, такие как режимы или опции модификации/внедрения
  • (необязательно) канареечное значение (-cv) — текст, который вы ожидаете увидеть при успешном использовании токена (например, "Welcome, ticarpi")
    Пример запроса может выглядеть так (используется режим сканирования на принудительные ошибки):
    $ 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!).

Разведка:

Прочитайте значение токена, чтобы понять, какие утверждения/значения ожидаются в приложении:
$ 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

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

Если найдены успешно эксплуатируемые уязвимости, измените соответствующие утверждения, чтобы попытаться их использовать (здесь применяется эксплойт 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

Фаззинг:

Копайте глубже, проверяя неожиданные значения и утверждения, чтобы выявить непредвиденное поведение приложения, или выполняйте атаки на логику приложения или обработку токенов:
$ 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


Справка

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

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


JWT Attack Playbook — новый раздел в wiki!

playbook_logo

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


Советы

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


Дополнительное чтение

  • JWT Attack Playbook (https://github.com/ticarpi/jwt_tool/wiki) — для полной методологии тестирования JWT

  • Отличное введение в JWT — https://jwt.io/introduction/

  • Значительная часть первоначального вдохновения для этого инструмента исходит из уязвимостей, обнаруженных Тимом Маклином.
    Посмотрите его блог о слабостях JWT здесь: https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/

  • Множество упражнений для тестирования уязвимостей JWT предоставляет Pentesterlab (https://www.pentesterlab.com). Я настоятельно рекомендую PRO-подписку, если вы интересуетесь пентестом веб-приложений.

    ОБРАТИТЕ ВНИМАНИЕ: Этот инструментарий решит большинство упражнений Pentesterlab по JWT за несколько секунд при правильном использовании, однако я настоятельно рекомендую вам проработать эти упражнения самостоятельно, разбираясь в структуре и слабостях. В конце концов, главное — это обучение...

Скачать инструмент