# L'Académie du détail

**Catégorie:** Web - **Difficulté:** Facile

**Description:**

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FvGSBl8BM9XOxJofyAQVi%2Fimage.png?alt=media&#x26;token=4047f3cb-29d2-4d77-99b3-281a5f5e0981" alt=""><figcaption></figcaption></figure>

Lien : <https://academie.challenges.404ctf.fr/>

**Solution:**

Pour ce challenge de web, nous arrivons sur une page d'accueil avec un carrousel, beaucoup de mots et un espace de connexion.

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FH61G1W28XT6hc9UynvpD%2Fimage.png?alt=media&#x26;token=b871d3c7-a2c8-40c7-ab50-5575ada85d59" alt=""><figcaption></figcaption></figure>

Nous pouvons dans un premier temps regarder le code source de la page mais rien d'intéressant à l'intérieur. La partie qui peut être très intéréssante est celle de la page de connexion :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FrogZERToC7KvFOql7jUI%2Fimage.png?alt=media&#x26;token=9407ed63-0735-4483-a28e-eaba1eb91513" alt=""><figcaption></figcaption></figure>

Pour ce connecter, il faut un nom d'utilisateur et un mot de passe (logique). On essaye tout de suite le couple *admin/amin* pour voir si l'administrateur du site ne serait pas trop bête.\
Résultat :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2Fd6X4ZeFkeJJbradkcmdx%2Fimage.png?alt=media&#x26;token=b19822ec-c43a-4429-b370-40a8d5608520" alt=""><figcaption></figcaption></figure>

Nous pouvons tester avec d'autres mots de passe génériques mais toujours cette même erreur.\
Passons à un autre utilisateur (test ou user ou pseudo). Quand nous testons, peu importe le mot de passe donné, nous parvenons à nous connecter :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2Fv89Mzn9urEHcz4Ck3e4m%2Fimage.png?alt=media&#x26;token=8dcf3338-6774-4942-83c2-b7f9b00b95c9" alt=""><figcaption></figcaption></figure>

Une nouvelle page a été débloquée : "Liste des membres". Si nous souhaitons y accéder, voici le résultat que nous avons :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FtiLYudojERzX5CXWQ2Kd%2Fimage.png?alt=media&#x26;token=f19e7ca8-5ed7-41d0-8ae4-05e95335cb5b" alt=""><figcaption></figcaption></figure>

Le résultat n'est toujours pas convaincant... Il faut donc trouver une solution a tout ce bazar.

La partie qui nous intéresse est celle de la connexion. En regardant de plus près la requête envoyée, nous voyons que l'utilisateur et le mot de passe sont passés en paramètres :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2F5pb6CtrS0QXlaMJeJliw%2Fimage.png?alt=media&#x26;token=18aa3c5e-4e0e-46b1-9f90-6b663dd05841" alt="" width="500"><figcaption></figcaption></figure>

En continuant, nous obtenons un token JWT :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2F8MLBBRptvYbQzZnLvvRu%2Fimage.png?alt=media&#x26;token=e88195b4-b027-47e0-9cb6-bb19d216655e" alt="" width="504"><figcaption></figcaption></figure>

Nous constatons que quoi que nous mettons dans le *name* et le *pass* de la requête POST nous parvenons à nous connecter sans soucis, sauf quand name à pour valeur *admin*.\
La dernière chose qui reste à étudier est donc ce fameux token JWT.

En allant sur[ jwt.io](https://jwt.io/) et en mettant le token récupéré, nous pouvons voir les infos remplies lors de l'envoi du formulaire de connexion :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2F8utlY5ysUjxDpZDglJGU%2Fimage.png?alt=media&#x26;token=77206b29-ca79-4979-b0cf-be16af0e5f98" alt="" width="563"><figcaption></figcaption></figure>

Si nous changeons le *username* avec la valeur *admin* et que nous renvoyons le token modifié pour continuer, même erreur que précédemment... Il y a donc un autre paramètre à modifier dans ce token pour régler le souci.

En regardant les différentes vulnérabilités des tokens JWT, nous voyons que le fait de passer l'algorithme à `null` dans le header était connue dans les CTF.\
Nous pouvons donc faire ça. Avec jwt.io, il est compliqué de le faire alors nous allons le faire à la main avec un convertisseur en B64 :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FmZsRnbmgG9pwvSD3Zg4y%2Fimage.png?alt=media&#x26;token=e2e22694-8344-457d-9010-9f24369540fe" alt=""><figcaption></figcaption></figure>

Le payload et la signature peuvent directement être modifiés sur le site jwt.io.

Maintenant, nous disposons des 3 parties du token : \
\- Le header : `eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0` (*{"alg":"none","typ":"JWT"}*)\
\- Le payload : `eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjg1NjM2NjIwfQ` (*{"username":"admin","exp":1685636620}*)\
\- La signature : `4ZU-NSZRL2L9Pm_wgNJiSComu9tHCu5z_2apAlvmdZc`\
nous pouvons reconstituer le token JWT complet comme ici : `eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjg1NjM2NjIwfQ.4ZU-NSZRL2L9Pm_wgNJiSComu9tHCu5z_2apAlvmdZc`

Une fois le token reconstitué sur [jwt.io](https://jwt.io/), nous allons le changer directement au moment de la requête à l'aide du proxy de Burp Suite :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FQZlBvPmpaeJkfLFsi8bN%2Fimage.png?alt=media&#x26;token=48838213-c46a-4873-a167-88aace81368d" alt="" width="518"><figcaption></figcaption></figure>

Et voilà le résultat :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FtgEXgSNRprUulWZrHBII%2Fimage.png?alt=media&#x26;token=27133bce-3a46-4132-b537-400fb1f99506" alt="" width="563"><figcaption></figcaption></figure>

<details>

<summary>🚩 FLAG</summary>

```
404CTF{JWT_M41_1MP13M3N73_=L35_Pr0813M35}
```

</details>
