
🐍 Un toolkit per testare, modificare e decifrare JSON Web Tokens
jwt_tool.py è un toolkit per validare, forgiare, scansionare e manomettere JWT (JSON Web Tokens).

Le sue funzionalità includono:
Questo strumento è scritto per pentester, che devono verificare la robustezza dei token in uso e la loro suscettibilità agli attacchi noti. Sono disponibili diverse opzioni di manomissione, firma e verifica per approfondire le potenziali debolezze presenti in alcune librerie JWT.
È stato inoltre utile per i partecipanti a CTF — visto che i CTF sembrano molto interessati ai JWT al momento.
Può essere utile anche per gli sviluppatori che usano JWT nei propri progetti e vogliono testarne la stabilità e le vulnerabilità note quando si utilizzano token forgiati.
Questo strumento è scritto nativamente in Python 3 (versione 3.6+) usando le librerie comuni; tuttavia varie funzioni crittografiche (e la resa grafica/leggibilità generale) richiedono l'installazione di alcune librerie Python comuni.
(Una versione precedente basata su Python 2.x di questo strumento è disponibile sul branch legacy per chi ne avesse bisogno, anche se non è più supportata o aggiornata)
L'uso preferito di jwt_tool è tramite l'immagine Docker ufficiale di jwt_tool ospitata su Dockerhub
Il comando base per eseguirlo è il seguente:
Comando base per eseguire jwt_tool:
docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
Usando il comando sopra puoi aggiungere qualsiasi altro argomento come al solito.
Nota che i file locali nella tua directory di lavoro corrente verranno mappati nella directory /tmp del container Docker, quindi puoi usarli impiegando quel percorso assoluto nei tuoi argomenti.
Es.
/tmp/localfile.txt
L'installazione consiste semplicemente nel scaricare il file jwt_tool.py (oppure fare git clone del repository).
(Eseguire anche chmod sul file se si vuole aggiungerlo al proprio $PATH e richiamarlo da qualsiasi posizione.)
$ git clone https://github.com/ticarpi/jwt_tool
$ python3 -m pip install -r requirements.txt
Al primo avvio lo strumento genererà un file di configurazione, alcuni file di utilità, un file di log e un set di chiavi pubbliche e private in vari formati.
jwtconf.ini come valore "jwkloc".Per risolvere i colori non funzionanti in Windows cmd/Powershell: decommenta le due righe seguenti in jwt_tool.py (rimuovi il "# " all'inizio di ogni riga)
Dovrai anche installare colorama: python3 -m pip install colorama
# import colorama
# colorama.init()
Il primo argomento deve essere il JWT stesso (a meno che non venga fornito in un header o in un cookie). Se non si forniscono argomenti aggiuntivi, verranno mostrati i valori decodificati del token per la revisione.
$ python3 jwt_tool.py <JWT>
oppure il comando base Docker:
$ docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
Il toolkit validerà il token e mostrerà i valori di header e payload.
I numerosi argomenti aggiuntivi ti portano direttamente alla funzione appropriata e ti restituiscono un token pronto per l'uso nei tuoi test.
Ad esempio, per manomettere il token esistente esegui il seguente comando:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T
Molte opzioni richiedono valori aggiuntivi per impostare le opzioni.
Ad esempio, per eseguire un particolare tipo di exploit devi scegliere l'opzione eXploit (-X) e selezionare la vulnerabilità (qui usando "a" per l'exploit alg:none):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a
Alcune opzioni, come la verifica dei token, richiedono parametri/file aggiuntivi (qui fornendo la chiave pubblica in formato PEM):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -V -pk public.pem
Tutte le modalità ora consentono di inviare il token direttamente a un'applicazione.
È necessario specificare:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M erVengono visualizzate varie risposte dalla richiesta:
Ecco una rapida panoramica di una valutazione di base di un'implementazione JWT. Se con queste opzioni non si ottengono risultati, approfondisci con altre modalità e opzioni per cercare nuove vulnerabilità (o zero-day!).