Désérialisation PHP avec une gadget chain préconstruite

Exploiting PHP deserialization with a pre-built gadget chain

Ce laboratoire utilise un mécanisme de session basé sur la sérialisation PHP à l’aide d’un cookie signé. L’application repose sur un framework PHP courant, sans accès au code source. Malgré cela, la désérialisation non sécurisée peut être exploitée via des gadget chains préexistantes.

Objectif : supprimer le fichier /home/carlos/morale.txt.

Identifiants fournis :

  • wiener : peter

Analyse du cookie de session

Cookie intercepté (URL-encoded) :

Après décodage :

Le cookie contient :

  • token → objet PHP sérialisé encodé en Base64

  • sig_hmac_sha1 → signature HMAC-SHA1 du token

Décodage du token :

Identification de l’environnement

À partir de phpinfo() :

  • PHP 7.4

Secret key exposée :

secret key : ara511gik1dqity8135f7o7zu7k3yx2j

Framework Symfony 4.3.6

Sélection de la gadget chain

Liste des gadgets disponibles avec phpggc :

Symfony 4 permet l’utilisation de chaînes RCE. La chaîne retenue :

Génération de l’objet malveillant

Commande utilisée :

Objet PHP sérialisé généré :

Encodage Base64 :

Calcul de la signature HMAC-SHA1

Script Python utilisé :

Signature obtenue :

Création du cookie final

Cookie JSON :

Après encodage URL, le cookie est injecté dans la requête HTTP.

Résultat

✔ Le cookie signé est accepté par l’application ✔ La gadget chain Symfony est exécutée ✔ Le fichier /home/carlos/morale.txt est supprimé

Mis à jour