Web Security Academy

Insecure deserialization - Lab : Exploiting Ruby deserialization using a documented gadget chain

Objectif :

  • Supprimer le fichier morale.txt se situant dans le répertoire personnel d'une personne se nommant Carlos dans le serveur distant.

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 sur le site 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 :

En utilisant un outil pour analyser les requêtes émises (par exemple Burp Suite), on extrait notre cookie de session codé en Base64 et on le décode.

Ce qui donne un objet sérialisé en Ruby (avec Marshal ).

Dans l'énoncé, il est précisé que le serveur utilise le framework Ruby on Rails (ROR).

On va utiliser un script écrit par Luke Jahnke ( https://www.elttam.com/blog/ruby-deserialization/#content ) qui va générer un objet sérialisé profitant d'un "gadjet chain" présent dans le framework utilisé, pour exécuter une commande ( on veut dans notre contexte supprimer le fichier morale.txt ).

On adapte le script pour insérer la commande voulue ( "rm /home/carlos/morale.txt" ) et on le lance pour générer le payload.

Il suffit ensuite de le placer dans le cookie de session en le codant en URL et de soumettre la requête modifiée.

Le serveur traite cet objet sérialisé, supprime le fichier morale.txt et le lab est validé !