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 : wiener

  • Mot 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 :

  • username

  • access_token

Analyse du comportement

  • Si un caractère du access_token est modifié, le serveur renvoie une erreur, ce qui indique que ce champ est normalement validé.

  • Le champ username est 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