🐍 Un kit de herramientas para probar, ajustar y descifrar JSON Web Tokens
jwt_tool.py es un kit de herramientas para validar, forjar, escanear y manipular JWTs (JSON Web Tokens).

Su funcionalidad incluye:
Esta herramienta está escrita para pentesters, que necesitan comprobar la fortaleza de los tokens en uso y su susceptibilidad a ataques conocidos. Hay disponibles varias opciones de manipulación, firma y verificación para ayudar a profundizar en las posibles debilidades presentes en algunas librerías JWT.
También ha tenido éxito entre los participantes de CTF, ya que los CTFs parecen estar muy interesados en los JWTs actualmente.
También puede ser útil para desarrolladores que usan JWTs en sus proyectos, pero quieren probar la estabilidad y las vulnerabilidades conocidas al usar tokens forjados.
Esta herramienta está escrita de forma nativa en Python 3 (versión 3.6+) usando las librerías comunes; sin embargo, varias funciones criptográficas (y el aspecto/legibilidad general) requieren la instalación de unas pocas librerías comunes de Python.
(Una versión anterior de esta herramienta para Python 2.x está disponible en la rama legacy para quien la necesite, aunque ya no recibe soporte ni actualizaciones)
El uso preferente de jwt_tool es con la imagen docker oficial de jwt_tool alojada en Dockerhub
El comando base para ejecutarlo es el siguiente:
Comando base para ejecutar jwt_tool:
docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
Usando el comando anterior puedes añadir cualquier otro argumento con normalidad.
Ten en cuenta que los archivos locales de tu directorio de trabajo actual se asignarán al directorio /tmp del contenedor docker, por lo que puedes usarlos empleando esa ruta absoluta en tus argumentos.
es decir,
/tmp/localfile.txt
La instalación consiste simplemente en descargar el archivo jwt_tool.py (o hacer git clone del repositorio).
(chmod al archivo también si quieres añadirlo a tu $PATH y ejecutarlo desde cualquier lugar.)
$ git clone https://github.com/ticarpi/jwt_tool
$ python3 -m pip install -r requirements.txt
En la primera ejecución, la herramienta generará un archivo de configuración, algunos archivos de utilidad, un archivo de log y un conjunto de claves públicas y privadas en varios formatos.
jwtconf.ini como el valor "jwkloc".Para arreglar los colores rotos en cmd/Powershell de Windows: descomenta las dos líneas siguientes en jwt_tool.py (elimina el "# " del principio de cada línea)
También necesitarás instalar colorama: python3 -m pip install colorama
# import colorama
# colorama.init()
El primer argumento debe ser el propio JWT (a menos que se proporcione en un valor de cabecera o cookie). Si no se proporcionan argumentos adicionales, se mostrarán los valores decodificados del token para su revisión.
$ python3 jwt_tool.py <JWT>
o el comando base de Docker:
$ docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
El kit de herramientas validará el token y listará los valores de la cabecera y el payload.
Los muchos argumentos adicionales te llevarán directamente a la función apropiada y te devolverán un token listo para usar en tus pruebas.
Por ejemplo, para manipular el token existente ejecuta lo siguiente:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T
Muchas opciones necesitan valores adicionales para configurarse.
Por ejemplo, para ejecutar un tipo concreto de exploit debes elegir la opción eXploit (-X) y seleccionar la vulnerabilidad (aquí usando "a" para el exploit alg:none):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a
Algunas opciones, como verificar tokens, requieren que se proporcionen parámetros/archivos adicionales (aquí se proporciona la clave pública en formato PEM):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -V -pk public.pem
Todos los modos permiten ahora enviar el token directamente a una aplicación.
Debes especificar:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M erSe muestran varias respuestas de la petición: