🐍 Un kit pour tester, ajuster et craquer les JSON Web Tokens
jwt_tool.py est une boîte à outils pour valider, forger, scanner et falsifier les JWT (JSON Web Tokens).

Ses fonctionnalités incluent :
Cet outil est conçu pour les pentesteurs, qui doivent vérifier la robustesse des jetons utilisés et leur susceptibilité aux attaques connues. Une gamme d'options d'altération, de signature et de vérification est disponible pour approfondir les faiblesses potentielles présentes dans certaines bibliothèques JWT.
Il a également été utile aux participants de CTF - car les CTF semblent friands de JWT actuellement.
Il peut aussi être utile aux développeurs qui utilisent des JWT dans leurs projets et souhaitent tester la stabilité et les vulnérabilités connues lors de l'utilisation de jetons forgés.
Cet outil est écrit nativement en Python 3 (version 3.6+) et utilise les bibliothèques courantes. Cependant, diverses fonctions cryptographiques (ainsi que le côté esthétique/la lisibilité en général) nécessitent l'installation de quelques bibliothèques Python courantes.
(Une version plus ancienne de cet outil en Python 2.x est disponible sur la branche legacy pour ceux qui en ont besoin, bien qu'elle ne soit plus prise en charge ni mise à jour)
L'utilisation préférée de jwt_tool se fait avec l'image docker jwt_tool hébergée sur Dockerhub.
La commande de base pour l'exécuter est la suivante :
Commande de base pour exécuter jwt_tool :
docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
En utilisant la commande ci-dessus, vous pouvez ajouter n'importe quel autre argument comme d'habitude.
Notez que les fichiers locaux de votre répertoire de travail courant seront mappés dans le répertoire /tmp du conteneur docker, vous pouvez donc les utiliser via ce chemin absolu dans vos arguments.
c.-à-d.
/tmp/localfile.txt
L'installation consiste simplement à télécharger le fichier jwt_tool.py (ou à faire git clone du dépôt).
(Ajoutez aussi chmod au fichier si vous voulez l'ajouter à votre $PATH et l'appeler depuis n'importe où.)
$ git clone https://github.com/ticarpi/jwt_tool
$ python3 -m pip install -r requirements.txt
Au premier lancement, l'outil générera un fichier de configuration, des fichiers utilitaires, un fichier journal, et un ensemble de clés publiques et privées dans différents formats.
jwtconf.ini comme valeur « jwkloc ».Pour corriger les couleurs cassées sous Windows cmd/PowerShell : décommentez les deux lignes ci-dessous dans jwt_tool.py (retirez le « # » au début de chaque ligne)
Vous devrez également installer colorama : python3 -m pip install colorama
# import colorama
# colorama.init()
Le premier argument doit être le JWT lui-même (sauf si vous le fournissez dans un en-tête ou une valeur de cookie). Ne fournir aucun argument supplémentaire affichera les valeurs décodées du jeton pour examen.
$ python3 jwt_tool.py <JWT>
ou la commande de base Docker :
$ docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
La boîte à outils validera le jeton et listera les valeurs de l'en-tête et du payload.
Les nombreux arguments supplémentaires vous mènent directement à la fonction appropriée et vous renvoient un jeton prêt à l'utiliser dans vos tests.
Par exemple, pour altérer le jeton existant, exécutez la commande suivante :
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T
De nombreuses options nécessitent des valeurs supplémentaires pour être configurées.
Par exemple, pour exécuter un type d'exploit particulier, vous devez choisir l'option eXploit (-X) et sélectionner la vulnérabilité (ici en utilisant « a » pour l'exploit alg:none) :
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a
Certaines options, comme la vérification des jetons, nécessitent la fourniture de paramètres/fichiers supplémentaires (ici, la clé publique au format PEM) :
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -V -pk public.pem
Tous les modes permettent désormais d'envoyer le jeton directement à une application.
Vous devez spécifier :
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M er