Web Security Academy

Insecure deserialization - Lab : Modifying serialized objects

Objectif :

  • Obtenir les droits d'administrateur du site pour ensuite supprimer le compte d'une personne se nommant Carlos.

Solution :

Lorsqu'on lance le lab, on arrive sur la première page d'un site de commerce. On aperçoit que l'on peut se loguer avec un compte utilisateur en appuyant sur "Account login" en haut à droite.

En utilisant les identifiants fournis dans l'énoncé (nom de compte : wiener ; mot de passe : peter ), on se connecte au site en tant que client ordinaire. Un cookie de session a été créé et va désormais apparaître parmi les headers des requêtes envoyées par le navigateur au serveur :

On extrait le cookie de session et on le décode ( il est codé en Base64 ).

Ce qui donne : O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:0;}

Un attribut nous saute aux yeux : admin. Il est du type booléen et il est égal à 0. Ce qui signifie que l'utilisateur wiener n'a pas les droits administrateurs.

Il suffit donc de changer la valeur de cet attribut à 1 pour pouvoir les obtenir : O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:1;}

On recode notre nouveau objet sérialisé en base64 et on le soumet au serveur. À partir de maintenant, il faut que toutes les requêtes envoyées contiennent ce cookie.

Le panel administrateur apparaît :

On a effectivement obtenu les permissions administrateurs !

Enfin il suffit d'accéder à cette section et de supprimer l'utilisateur Carlos pour valider le lab.