# L'Épistolaire moderne

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

**Description:**

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FtZor80Glv6CIbUlvsnbD%2Fimage.png?alt=media&#x26;token=0a73ce9e-aee6-4318-95ca-c5337897e384" alt=""><figcaption></figcaption></figure>

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

**Solution:**

Pour ce challenge, nous avions accès à un chat (assez têtu) à qui nous pouvions envoyer des messages une fois connecter en tant qu'invité :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FYvZfXWbzVcLwsZjPJ6Kp%2Fimage.png?alt=media&#x26;token=65d45e85-73f8-4b32-9a3d-85a1533f3fb9" alt="" width="563"><figcaption></figcaption></figure>

Nous pouvons constater que les discussions avec cette princesse sont assez constructives et bien utiles :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2F4JjqLAUsVK4a04lseCDm%2Fimage.png?alt=media&#x26;token=d8b2ae87-50bf-432f-b10d-bf4c651e3975" alt="" width="563"><figcaption></figcaption></figure>

Nous comprenons 2 choses ici : \
\- La princesse ne veut pas nous donner le flag gentiment\
\- Rester poli ne sert à rien :joy:

Il faut donc chercher quelque chose qui pourrait nous être utile : le code source du bot, l'interception d'une réponse, un flag ?\
Commençons par le code source du bot. En regardant ce qu'il se passe, nous voyons qu'il y a des fichiers .js qui sont appelés : <br>

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FoCwGR4oKCla6IDPaZVHN%2Fimage.png?alt=media&#x26;token=9229879b-84a3-42c5-8aa2-0700f3ea3c9a" alt="" width="563"><figcaption></figcaption></figure>

Nous allons directement checker le fichier main.js qui appellent surement les autres fichiers .js :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FEirE2vqyAUiLz7k58shK%2Fimage.png?alt=media&#x26;token=970bc632-8cce-483d-87ea-aa769977ad38" alt="" width="563"><figcaption></figcaption></figure>

Il s'agit d'un code presque illisible (ou du moins incompréhensible) comme ceci. Pour y voir plus clair nous allons utiliser un site qui va nous remettre tout ce code d'aplomb : <https://beautifier.io/>\
Avec ce site nous obtenons un code structuré avec une indentation correcte et donc lisible plus facilement.

Après un survol du code, nous voyons que lorsqu'un texte est envoyé, le site va appeler une API pour donner une réponse. Cela explique donc pourquoi les réponses de la princesse étaient toujours les mêmes...\
En cherchant donc les principales requête HTTP d'une API (GET, POST, PUT, DELETE...) nous trouvons rapidement une fonction intéressante :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2F8RMOVBDtuPMTLZCHw0FK%2Fimage.png?alt=media&#x26;token=eed899d4-0e52-40ae-bf8e-df6c44d74e64" alt="" width="563"><figcaption></figcaption></figure>

Cette fonction nous donne un indice sur le "type de texte" intéressant à envoyer : une URL.\
Nous voyons également qu'il y a une fonction nommé getToken ce qui est intéressant car il y a peut être quelque chose à récupérer avec ou dans cette fonction :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FC9uou5FZELRldINIWKMe%2Fimage.png?alt=media&#x26;token=51dc9ebe-7129-4758-878f-cda9463a80a6" alt="" width="563"><figcaption></figcaption></figure>

Cette fonction permet de récupérer un cookie, surement celui d'un service sur le serveur ou même celui de la princesse.

Si nous faisons donc un lien entre tout ce que nous avons trouvé précédemment, il nous faut un lien que nous allons envoyer à la princesse pour récupérer un token.\
Maintenant il faut réfléchir un peu pour trouver quoi faire/utiliser.

Très rapidement nous trouvons l'option ngrok afin de créer un petit tunnel et de récupérer les résultats d'une requête. Mais en même temps, nous somme un peu flemmard pour faire ça (trouver les "bonnes commandes" à exécuter), alors nous allons utiliser [Request Bin](https://public.requestbin.com/r) qui fera parfaitement le travail.\
En envoyant notre lien, nous récupérons directement le résultat et le fameux token, un JWT :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FjDUF2ppoabmU9JT7X1un%2Fimage.png?alt=media&#x26;token=7365ba7c-0f26-44cc-87d1-ab154923e280" alt="" width="563"><figcaption></figcaption></figure>

Nous récupérons ce token JWT : *`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwdWJsaWNfaWQiOiI3NTUwODhhMS0wNDcxLTQyYzgtYjdhZS1mNzdmZjhmN2Y3OWUiLCJleHAiOjE2ODU3ODkxMTQsImlhdCI6MTY4NTc4NzMxNCwiaXNzIjoiaHR0cHM6Ly9lcGlzdG9sYWlyZS5jaGFsbGVuZ2VzLjQwNGN0Zi5mciJ9.cyqOLqJsfZN5j5CTEgdY_m2Rup0X_78s3VEQk-_1_1I`*\
que nous allons utiliser pour tenter de nous connecter.\
Pour ce faire, comme d'habitude nous allons utiliser le proxy de BurpSuite :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FqJ0DdxFAOHGM4p6FTvoS%2Fimage.png?alt=media&#x26;token=8f1e175c-fb55-49f0-873c-9d26bc0f9632" alt="" width="563"><figcaption></figcaption></figure>

En se connectant avec ce token, nous obtenons une nouvelle page disponible "Notes personnelles" qui auparavant n'était pas visible.\
Essayons donc d'y accéder toujours avec le token afin de voir le contenu de cette page :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FUe5o5d6iKw5aqmYWhGYw%2Fimage.png?alt=media&#x26;token=9c398c75-dcae-4a0b-af6f-78dd015ffefe" alt="" width="563"><figcaption></figcaption></figure>

Après quelques redirections (4 ou 5), nous arrivons enfin sur cette page. Il est possible de déplier chaque "tiroir" pour voir le contenu. Faisons-le jusqu'à trouver quelque chose d'intéressant :&#x20;

<figure><img src="https://4219205392-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fybn4btwQnvitOl9uXz9p%2Fuploads%2FD9Iynnn6hZo3CrfWWQVL%2Fimage.png?alt=media&#x26;token=bfe0182f-6892-462b-9d3d-7f745c2e2985" alt="" width="563"><figcaption></figcaption></figure>

Et voilà, le flag se trouvait dans le dernier "tiroir" de cette page.

<details>

<summary>🚩 FLAG</summary>

```
404CTF{L34k_d3_C00k13s_s3cr3ts}
```

</details>
