# L'Académie du détail

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

**Description:**

<figure><img src="/files/gn9bATGwK6ERS3fsKbTb" 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="/files/8Ime4Jxc60yubBsnds4f" 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="/files/uYOkPAjqVtLaCkl321yc" 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="/files/Oo5ObWudzoe2B0KH4NgF" 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="/files/Idjvba2yai6YXGyU5w1f" 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="/files/Tdn96JJWtVh4XOZTpPZP" 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="/files/nZNSL341ozKulJXoSDK7" alt="" width="500"><figcaption></figcaption></figure>

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

<figure><img src="/files/yx14hLQgg3Fm1JwZ9yX4" 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="/files/JxowBG5lYMxUl6zdvsIG" 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="/files/9OvM4KQypkoS8jent8hp" 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="/files/enL0chV0gkhkqxNSa2aV" alt="" width="518"><figcaption></figcaption></figure>

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

<figure><img src="/files/8nltftEjmhxDrxzMlEaI" alt="" width="563"><figcaption></figcaption></figure>

<details>

<summary>🚩 FLAG</summary>

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

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://writeups.ayweth20.com/2023/404ctf-2023/web/lacademie-du-detail.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
