Terminé escribiendo un pequeño script de Python que usa PyJWT para analizar el JWT y verificar la firma.
También hay jwtbrute . No lo he probado, pero parece ser un poco más eficiente que mi secuencia de comandos porque hace mucho trabajo como descodificar en base64 fuera del bucle.
Si quieres romper JWTs usando John the Ripper, necesitas convertir su formato a algo como esto:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjEyMzQ1Njc4OTAsIm5hbWUiOiJKb2huIERvZSIsImFkbWluIjp0cnVlfQ#7a86835464c295175fc5465788fb377fc16624390313f5424055ea2b1a4bb2db
Como puede ver, las dos primeras partes son iguales, pero la firma ahora es hexadecimal en lugar de base64. Además, se separa de los datos con #
en lugar de .
. Escribí un pequeño script para hacer la conversión.
También necesitas una versión reciente de john
. La versión que viene con Kali no funcionó para mí, pero sí lo hizo la versión en 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