
Ce script Python implémente un exploit d'exécution de code à distance (RCE) pour les applications Laravel vulnérables via une désérialisation non sécurisée, basé sur la vulnérabilité CVE-2018-15133.
L'exploit exploite une vulnérabilité dans Laravel (versions 5.5.40 et antérieures, et 5.6.0 à 5.6.29) où les sessions chiffrées sont automatiquement désérialisées sans validation appropriée. Avec l'accès à la clé APP_KEY de Laravel, un attaquant peut chiffrer des payloads malveillants qui seront désérialisés et exécutés sur le serveur.
Laravel utilise un mécanisme de chiffrement symétrique pour les sessions avec trois composants :
IV (Initialization Vector) : vecteur d'initialisation aléatoire généré pour chaque session
Value : valeur chiffrée à l'aide d'AES-128-CBC ou AES-256-CBC
MAC : code d'authentification de message (HMAC-SHA256) calculé sur IV + value + APP_KEY
Reçoit trois paramètres d'entrée : la clé APP_KEY de Laravel en base64, la commande à exécuter et le domaine cible
Invoque l'outil PHPGGC avec la chaîne de gadgets Laravel/RCE5 pour générer une chaîne d'objets PHP malveillants
Construit la commande du système d'exploitation qui sera exécutée sur le serveur victime (exemple : system('whoami');)
Génère le payload PHP sérialisé contenant les gadgets enchaînés
Décode le payload de base64 au format binaire
Traite la clé APP_KEY en supprimant le préfixe "base64:" s'il existe
Complète le padding nécessaire pour que la clé soit un base64 valide
Décode la clé de base64 en octets
Génère un vecteur d'initialisation (IV) aléatoire de 16 octets
Chiffre le payload en utilisant AES en mode CBC avec la clé et l'IV
Applique le padding PKCS7 au payload avant le chiffrement
Encode l'IV en base64
Encode le texte chiffré (payload chiffré) en base64
Concatène l'IV et la valeur en base64 comme message pour le HMAC
Calcule le MAC en utilisant HMAC-SHA256 sur le message concaténé avec la clé comme secret
Construit un objet JSON avec trois champs : iv, value et mac
Encode le JSON complet en base64
Construit une requête HTTP à l'aide de curl avec le payload dans le cookie laravel_session
Envoie la requête au domaine cible
Le serveur Laravel reçoit le cookie et décode le base64
Laravel vérifie l'intégrité du MAC par rapport à l'IV et à la valeur reçus
Laravel déchiffre le contenu en utilisant AES-CBC avec sa clé APP_KEY
Laravel désérialise automatiquement le contenu déchiffré
PHP invoque les fonctions magiques __destruct() ou __wakeup() des objets désérialisés
La chaîne de gadgets se déclenche et aboutit à call_user_func() ou eval()
La commande du système d'exploitation est exécutée sur le serveur
L'exploit utilise des chaînes de gadgets qui enchaînent des appels aux fonctions magiques de PHP :
Pendant la désérialisation, PHP invoque automatiquement __destruct() ou __wakeup(), initiant la chaîne qui aboutit à eval() exécutant du code arbitraire.
Prérequis Pour que l'exploit fonctionne, l'attaquant a besoin de :
La clé APP_KEY de Laravel (obtenue par fuite de variables d'environnement, buckets S3 exposés, code source, etc.)
Version vulnérable de Laravel avec désérialisation activée par défaut
PHPGGC installé dans le répertoire ./phpggc/ https://github.com/ambionics/phpggc
Exemple d'utilisation
python exploit.py "base64:dGhpc2lzYXNlY3JldGtleQ==" "whoami" "http://target.htb"
Este comando generará un payload serializado que ejecutará whoami cuando Laravel deserialice la sesión.