🐍 Ein Toolkit zum Testen, Anpassen und Knacken von JSON Web Tokens
jwt_tool.py ist ein Toolkit zum Validieren, Fälschen, Scannen und Manipulieren von JWTs (JSON Web Tokens).

Die Funktionalität umfasst:
Dieses Tool wurde für Pentester geschrieben, die die Stärke der verwendeten Token und deren Anfälligkeit für bekannte Angriffe prüfen müssen. Eine Reihe von Manipulations-, Signier- und Verifizierungsoptionen steht zur Verfügung, um tiefer in die potenziellen Schwachstellen einzutauchen, die in einigen JWT-Bibliotheken vorhanden sind.
Es hat sich auch für CTF-Teilnehmer als nützlich erwiesen – da CTFs derzeit offenbar sehr auf JWTs stehen.
Es kann auch für Entwickler nützlich sein, die JWTs in Projekten verwenden, aber die Stabilität und bekannte Schwachstellen beim Einsatz gefälschter Token testen möchten.
Dieses Tool ist nativ in Python 3 (Version 3.6+) geschrieben und verwendet die gängigen Bibliotheken. Verschiedene kryptografische Funktionen (und die allgemeine Optik/Lesbarkeit) erfordern jedoch die Installation einiger gängiger Python-Bibliotheken.
(Eine ältere Python-2.x-Version dieses Tools ist für diejenigen, die sie benötigen, im Legacy-Zweig verfügbar, wird jedoch nicht mehr unterstützt oder aktualisiert)
Die bevorzugte Verwendung für jwt_tool ist mit dem offiziellen, auf Dockerhub gehosteten jwt_tool-Docker-Image
Der Basisbefehl für die Ausführung lautet wie folgt:
Basisbefehl zum Ausführen von jwt_tool:
docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
Mit dem obigen Befehl kannst du wie gewohnt beliebige weitere Argumente anhängen.
Beachte, dass lokale Dateien in deinem aktuellen Arbeitsverzeichnis in das /tmp-Verzeichnis des Docker-Containers gemappt werden. Du kannst sie also über diesen absoluten Pfad in deinen Argumenten verwenden.
z. B.
/tmp/localfile.txt
Die Installation besteht lediglich darin, die Datei jwt_tool.py herunterzuladen (oder das Repo zu git clone).
(Führe auch chmod auf der Datei aus, wenn du sie zu deinem $PATH hinzufügen und von überall aufrufen möchtest.)
$ git clone https://github.com/ticarpi/jwt_tool
$ python3 -m pip install -r requirements.txt
Beim ersten Start erzeugt das Tool eine Konfigurationsdatei, einige Hilfsdateien, eine Logdatei und einen Satz öffentlicher und privater Schlüssel in verschiedenen Formaten.
jwtconf.ini als Wert "jwkloc" gespeichert werden.Um defekte Farben in Windows cmd/Powershell zu beheben, entferne die Kommentierung der folgenden zwei Zeilen in jwt_tool.py (entferne das "# " am Anfang jeder Zeile).
Du musst außerdem colorama installieren: python3 -m pip install colorama
# import colorama
# colorama.init()
Das erste Argument sollte das JWT selbst sein (sofern es nicht in einem Header- oder Cookie-Wert bereitgestellt wird). Wenn keine weiteren Argumente angegeben werden, werden die dekodierten Token-Werte zur Überprüfung angezeigt.
$ python3 jwt_tool.py <JWT>
oder der Docker-Basisbefehl:
$ docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
Das Toolkit validiert das Token und listet die Header- und Payload-Werte auf.
Die vielen zusätzlichen Argumente führen dich direkt zur entsprechenden Funktion und liefern dir ein Token, das du in deinen Tests verwenden kannst.
Um zum Beispiel das vorhandene Token zu manipulieren, führe Folgendes aus:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T
Viele Optionen benötigen zusätzliche Werte, um Optionen zu setzen.
Um beispielsweise einen bestimmten Exploit-Typ auszuführen, musst du die Option eXploit (-X) wählen und die Schwachstelle auswählen (hier wird "a" für den alg:none-Exploit verwendet):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a
Einige Optionen wie das Verifizieren von Token erfordern zusätzliche Parameter/Dateien (hier wird der öffentliche Schlüssel im PEM-Format bereitgestellt):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -V -pk public.pem
Alle Modi erlauben es nun, das Token direkt an eine Anwendung zu senden.
Du musst Folgendes angeben:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M erVerschiedene Antworten auf die Anfrage werden angezeigt: