formAlity


Introduction

Sur ce site vous pourrez retrouver un sondage cinématographique. Vous pourrez aussi vous rapprocher d’un administrateur afin qu’il puisse vous générer un justificatif de présence.

App

Path

  1. Exploitation d’un JWT non vérifié
  2. Exploitation d’une SSTI pour avoir une RCE.

Exploitation

JWT

Lorsque l’on s’inscrit, puis que l’on se connecte, on tombe sur une page qui nous donne notre type de compte. Ici, je suis un user.

Account type

Si on souhaite aller sur la page des justificatifs, comme demandé dans la description du challenge, on a un message d’erreur car nous n’avons pas les permissions nécessaires.

Not enough permissions

En allant sur jwt.io, on peut voir que notre role user est stocké dans le JWT.

JWT

Si on essaie de changer uniquement que la valeur du role en le passant à admin, eh bien je suis désormais admin.

admin

SSTI

On a donc accès au formulaire : form

Une fois le formulaire soumis, un fichier PDF nous est renvoyé avec notre nom, et notre prénom, ainsi que la date actuelle.

Si on envoie aucun des deux champs dans la requête, le PDF reçu renvoie un Nom à undefined, ce qui réduit la possibilité du nombre de langage qui feraient tourner le site.

C’est probablement du JavaScript, mais pour en avoir le coeur net, je vais envoyer:

`${process.env}`

Ce petit bout de code va exécuter process.env en Nodejs, et devrait nous renvoyer les variables d’environnements sous forme de String. Mais étant un objet, on devrait avoir le retour [Object object].

Object object

Donc en effet, c’est bel et bien du JavaScript. Il ne reste plus qu’à exécuter un shell. En Node.JS, il y a une librairie native qui s’appelle child_process, et qui permet d’exécuter des binaires à la manière de system en C ou en PHP.

On peut donc envoyer la payload suivante :

`${require("child_process").execSync("ls -lAR")}`

Ls result

On a donc un fichier flag.txt à la racine du projet. Il ne reste plus qu’à le lire.

`${require("child_process").execSync("cat flag.txt")}`

Ls result

Flag: SHLK{JwT_bYpaS5_2_RCe}