web-dev-qa-db-fra.com

Utiliser hashcat pour casser la signature JWT dans WebGoat

J'ai récemment commencé à pratiquer mes compétences de test de pénétration et j'ai commencé avec WebGoat.

Je suis arrivé au chapitre "Authentication Bypass", au cracking JWT Token. WebGoat présente ce jeton JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJpYXQiOjE1MjQyMTA5MDQsImV4cCI6MTYxODkwNTMwNCwiYXVkIjoid2ViZ29hdC5vcmciLCJzdWIiOiJ0b21Ad2ViZ29hdC5jb20iLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQuY29tIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.vPe-qQPOt78zK8wrbN1TjNJj3Lex9Qbch6oo23RUJgM

et vous demande de changer le nom d'utilisateur en WebGoat et de soumettre le nouveau jeton JWT. Cela signifie que je dois trouver avec quel secret la fonction de hachage génère la signature.

Pour ce faire, WebGoat recommande d'utiliser HashCat avec une liste de 10000 mots, ce que j'ai essayé de faire via mon Kali Linux 2018.4 (fonctionnant sur une machine virtuelle de lecteur vmware) avec la commande:

$ hashcat -a 0 -m 1450 text.hash /root/wordlists/google-10000-english-master/google-10000-english.txt

Malheureusement, je reçois cette erreur:

* Device #1: This device's constant buffer size is too small.

* Device #1: This device's local mem size is too small.

No devices found/left.

Ce sont mes spécifications: enter image description here

J'ai fourni le Kali Linux avec 4 Go RAM et et 4 processeurs.

Je veux juste résoudre cette étape et passer à autre chose, cela ne me dérange pas d'utiliser un autre programme préinstallé dans le Kali, et si c'est encore mieux que HashCat, alors dites-le moi!

Cela ne me dérange pas non plus d'écrire le code moi-même pour le renforcement brutal, mais je suis sûr qu'il ne sera pas aussi efficace que ce qui est proposé sur Internet.

3
Maxim Shloz

Structure du jeton JWT

Comme détaillé sur le site Web JWT ( https://jwt.io/introduction/ ), le jeton JWT se compose de trois parties séparées par un point (.), Qui sont - En-tête, Charge utile et Signature. L'en-tête et la charge utile sont des chaînes codées en Base64.

Par conséquent, un jeton JWT ressemblerait généralement à ceci: Base64 (en-tête) .Base64 (charge utile) .Signature

La signature est créée en prenant à la fois l'en-tête et la charge utile, utilisez une clé secrète pour créer une signature en utilisant l'algorithme spécifié dans l'en-tête.

Recherche de la clé secrète JWT

Ce que vous devez faire pour résoudre ce défi est de trouver la clé secrète qui a été utilisée pour créer la signature. Cela peut être fait en utilisant une attaque par force brute pour calculer la signature en utilisant différentes clés secrètes à partir d'une liste de mots ou par le biais d'une attaque par force brute pure.

La syntaxe correcte à utiliser pour mener une attaque par force brute pour trouver la clé secrète à l'aide de Hashcat est:

Using a Wordlist:  
$ hashcat -a0 -m 16500 text.hash [dict]

Pure Brute force attack:  
$ hashcat -a3 -m 16500 text.hash

L'option -m 16500 est le mode de hachage correct pour forcer les jetons JWT par force brute à l'aide de Hashcat. Celui que vous avez utilisé (-m 1450) est pour le hachage HMAC-SHA256 brut et est appliqué à la chaîne entière, ce qui entraîne donc une erreur.

La méthode ci-dessus fonctionne bien pour moi pour trouver une clé secrète pour un jeton JWT donné, cependant, je ne suis pas encore en mesure de résoudre le défi WebGoat. J'essaie de prendre contact avec l'équipe Webgoat pour comprendre le problème et résoudre ce défi. Je fournirai une mise à jour lorsque j'entendrai parler d'eux et pourra résoudre le défi.

6
Vishal