Ho finito per scrivere un piccolo script Python che utilizza PyJWT per analizzare il JWT e controllare la firma.
C'è anche jwtbrute . Non l'ho provato, ma sembra un po 'più efficiente del mio script perché fa molto lavoro come decodifica in base64 al di fuori del ciclo.
Se vuoi craccare i JWT usando John the Ripper, devi convertire il loro formato in qualcosa del genere:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEyMzQ1Njc4OTAsIm5hbWUiOiJKb2huIERvZSIsImFkbWluIjp0cnVlfQ#7a86835464c295175fc5465788fb377fc16624390313f5424055ea2b1a4bb2db
Come puoi vedere le prime due parti sono le stesse, ma la firma ora è hex invece di base64. Inoltre, è separato dai dati con #
anziché .
. Ho scritto un piccolo script per fare la conversione.
Hai anche bisogno di una versione recente di john
. La versione fornita con Kali non ha funzionato per me, ma è stata eseguita la versione su GitHub .
$ ./john ~/dev/crackjwt/jwt.john
Using default input encoding: UTF-8
Loaded 1 password hash (HMAC-SHA256 [password is key, SHA256 256/256 AVX2 8x])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
secret (?)
1g 0:00:00:00 DONE 2/3 (2016-08-24 15:58) 6.666g/s 218453p/s 218453c/s 218453C/s 123456..skyline!
Use the "--show" option to display all of the cracked passwords reliably
Session completed