Web Security Academy

Insecure deserialization - Lab : Exploiting Java deserialization with Apache Commons

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. On observe que c'est un objet sérialisé en Java.

Dans l'énoncé, il est précisé que le lab utilise la librairie Apache Commons Collections. On va donc essayer d'exécuter une commande qui va supprimer le fichier morale.txt en générant et soumettant au serveur un objet sérialisé basé sur un gadget chain connu pour cette librairie.

Lorsque le serveur traitera cet objet, la commande soigneusement placée dans notre objet s'exécutera.

On va utiliser l'outil ysoserial pour générer notre payload :

java -jar ysoserial-master-30099844c6-1.jar CommonCollections4 'rm /home/carlos/morale.txt' | base64

On place ce payload codé en Base64 dans le cookie en n'oubliant pas le coder en URL pour gérer certains caractères spéciaux associés à ce contexte et on soumet la requête modifiée.

Le serveur va alors supprimer le fichier morale.txt et le lab est résolu.