JWT Kiddo
Flag: CYBN{h4ck3r_2_h4ck3r5}
Challenge
Ce challenge tourne sur un docker et n'est pas disponible
Solution
Analyse du site
En cliquant sur le bouton Obtenir le flag, on voit qu'il faut รชtre l'utilisateur admin
.

ร partir de maintenant, j'utilise BurpSuite pour explorer le site, avec l'extension JWTEditor pour faciliter le traitement des JWT (c'est tout ร fait possible de faire sans rien).
Lors de notre premiรจre visite sur le site, un cookie nous a รฉtรฉ donnรฉ. Il contient un JWT :

Le JWT utilise le champ kid
, c'est le champ qui indique la clรฉ utilisรฉe pour signer le token. En modifiant sa valeur, on obtient une erreur :

On se rend compte que la clรฉ est rรฉcupรฉrรฉe dans le dossier /public/keys/
.
En regardant les autres requรชtes du site, on peut รฉgalement voir que les messages envoyรฉs sont enregistrรฉs dans le dossier /public/data/
:

LFI Proof of Concept
Si l'on remplace le kid
par l'un des messages, on confirme que l'on peut les utiliser comme clรฉ de signature puisqu'on a plus d'erreur "No such file".

Forger ses tokens
L'objectif est de crรฉer notre propre paire de clรฉ privรฉe/publique, envoyer la clรฉ publique dans le chat et l'utiliser pour la signature. La clรฉ privรฉe, elle, servira ร signer notre prope token.
On commence par crรฉer la paire de clรฉ avec openssl
:
$ openssl genrsa -out private-key.pem 4096
$ openssl rsa -in private-key.pem -pubout -out public-key.pem
Maintenant, on envoie la clรฉ publique dans le chat et rรฉcupรฉrer son chemin :


Enfin, on peut aller sur un site comme JWT.io pour crรฉer le token avec les infos que l'on a. Il faut mettre le bon header du JWT et changer le nom du user dans le body :

Ce token peut รชtre utilisรฉ pour rรฉcupรฉrer le flag :

Derniรจre mise ร jour
Cet article vous a-t-il รฉtรฉ utile ?