Modification des types de données sérialisées
Modifying serialized data types
Objectif du laboratoire
Ce laboratoire utilise un mécanisme de session basé sur la sérialisation et présente une vulnérabilité permettant de contourner l’authentification. Le but est de modifier l’objet sérialisé contenu dans le cookie de session afin d’accéder au compte administrateur, puis de supprimer l’utilisateur carlos.
Accès initial
On peut se connecter avec les identifiants suivants :
Utilisateur :
wienerMot de passe :
peter
Après la connexion, le serveur renvoie un cookie de session contenant un objet sérialisé et encodé en Base64.
Cookie de session obtenu
Le cookie de session a la valeur suivante :
Décodage Base64
Après décodage, on obtient l’objet PHP sérialisé suivant :
Cet objet représente une instance de la classe User avec deux propriétés :
usernameaccess_token
Analyse du comportement
Si un caractère du
access_tokenest modifié, le serveur renvoie une erreur, ce qui indique que ce champ est normalement validé.Le champ
usernameest utilisé pour déterminer le rôle de l’utilisateur.

Exploitation de la vulnérabilité
Modification du nom d’utilisateur
On remplace la valeur de username par administrator en ajustant correctement la longueur de la chaîne (s:13).
Changement du type de donnée du token
Au lieu de fournir un access_token de type chaîne (string), on modifie son type en booléen (b:1, équivalent à true).
Objet sérialisé final :
Après ré-encodage en Base64 et insertion dans le cookie de session, le serveur accepte l’objet sans vérifier correctement le type du token.
L’application considère alors la session comme valide pour l’utilisateur administrator.

Mis à jour