Objectif du laboratoire
Se connecter en tant qu’administrateur puis supprimer l’utilisateur carlos.
Fonctionnalité Forgot password
Une fonctionnalité de réinitialisation de mot de passe est disponible.
La requête envoyée côté serveur est la suivante :
La réponse du serveur est :
Tentatives de pollution de paramètres
On essaie d’ajouter un nouveau paramètre via & :
ou encodé :
Le serveur répond :
Utilisation du caractère #
Avec #, le comportement change :
ou encodé :
Réponse du serveur :
Cela indique l’existence d’un paramètre field attendu côté serveur.
Découverte du paramètre field
On envoie alors :
Ensuite, on combine field avec # pour injecter des valeurs supplémentaires :
ou encodé :
En testant différentes server-side variable names, on obtient une réponse valide avec le code 200, révélant les champs email et username.
Analyse du fichier JavaScript forgot-password.js
Un fichier JavaScript accessible révèle la logique suivante :
Les données du formulaire sont encodées manuellement.
La requête est envoyée via fetch en POST.
Si la réponse contient la propriété result, le message Please check your email est affiché.
Un paramètre reset-token est récupéré depuis la query string :
Cela confirme l’existence d’un paramètre reset_token exploitable.
Exploitation du paramètre reset_token
On injecte alors ce paramètre via la pollution serveur :
Le serveur répond :
Réinitialisation du mot de passe administrateur
En utilisant le token obtenu, on accède à l’URL suivante :
Cela permet de réinitialiser le mot de passe de l’administrateur, se connecter avec ce compte, puis supprimer l’utilisateur carlos, validant ainsi le laboratoire.