Injection d’objets arbitraires en PHP
Arbitrary object injection in PHP
Description du laboratoire
Ce laboratoire utilise un mécanisme de session basé sur la sérialisation PHP et est vulnérable à une injection d’objets arbitraires.
L’objectif est de fabriquer et injecter un objet sérialisé malveillant afin de supprimer le fichier morale.txt situé dans le répertoire personnel de Carlos.
Identifiants fournis :
Utilisateur :
wienerMot de passe :
peter
Connexion et observation de la session
Après connexion avec les identifiants fournis, une cookie de session est définie.
Son contenu est un objet PHP sérialisé de type User, par exemple :
Cela confirme que l’application désérialise directement des objets PHP contrôlables par l’utilisateur.
Accès au code source
Dans le code HTML de l’application, un commentaire attire l’attention :
L’accès direct au fichier /libs/CustomTemplate.php ne retourne rien.

Cependant, en utilisant une sauvegarde d’éditeur (suffixe ~) :
on obtient le code source PHP.
Analyse de la classe vulnérable
La classe CustomTemplate contient notamment :
Deux attributs privés :
$template_file_path$lock_file_path
Une méthode magique
__destruct()qui exécute :
Cela signifie que lors de la destruction de l’objet, n’importe quel fichier dont le chemin est stocké dans lock_file_path peut être supprimé
Exploitation via désérialisation
Comme l’application désérialise des objets PHP issus de la session, il est possible de :
Créer manuellement un objet
CustomTemplateContrôler directement la valeur de
lock_file_pathForcer la suppression du fichier ciblé lors de l’appel automatique à
__destruct()
Objet sérialisé malveillant :
Encodage Base64
Pour l’injecter dans la cookie de session, l’objet est encodé en Base64 :
Mis à jour