JWT Kiddo

Flag: CYBN{h4ck3r_2_h4ck3r5}

Challenge

Description


J'ai dรฉcouvert un forum assez รฉtrange, apparement รงa se refile des solutions sous le manteau pour la CyberNight...

Il faudra pouvoir accรจder au compte de l'administrateur du site pour rรฉvรฉler ses plus sombres secrets !

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 ?