PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Ceci est essentiellement un résumé de https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Introduction
La création de nouveaux objets arbitraires, tels que new $_GET["a"]($_GET["a"])
, peut conduire à une exécution de code à distance (RCE), comme détaillé dans un writeup. Ce document met en évidence diverses stratégies pour atteindre une RCE.
RCE via des classes personnalisées ou un chargement automatique
La syntaxe new $a($b)
est utilisée pour instancier un objet où $a
représente le nom de la classe et $b
est le premier argument passé au constructeur. Ces variables peuvent provenir d'entrées utilisateur telles que GET/POST, où elles peuvent être des chaînes ou des tableaux, ou de JSON, où elles peuvent apparaître sous d'autres types.
Considérez l'extrait de code ci-dessous :
Dans ce cas, en définissant $a
sur App
ou App2
et $b
sur une commande système (par exemple, uname -a
), cela entraîne l'exécution de cette commande.
Les fonctions d'autoload peuvent être exploitées si de telles classes ne sont pas directement accessibles. Ces fonctions chargent automatiquement les classes à partir de fichiers lorsque nécessaire et sont définies en utilisant spl_autoload_register
ou __autoload
:
Le comportement du chargement automatique varie selon les versions de PHP, offrant différentes possibilités d'exécution de code à distance.
RCE via les classes intégrées
En l'absence de classes personnalisées ou d'autoloaders, les classes PHP intégrées peuvent suffire pour l'exécution de code à distance. Le nombre de ces classes varie entre 100 et 200, en fonction de la version de PHP et des extensions. Elles peuvent être répertoriées en utilisant get_declared_classes()
.
Les constructeurs d'intérêt peuvent être identifiés grâce à l'API de réflexion, comme le montre l'exemple suivant et le lien https://3v4l.org/2JEGF.
L'exécution de code à distance via des méthodes spécifiques inclut:
SSRF + Désérialisation Phar
La classe SplFileObject
permet SSRF grâce à son constructeur, permettant des connexions à n'importe quelle URL:
SSRF peut conduire à des attaques de désérialisation dans les versions de PHP antérieures à 8.0 en utilisant le protocole Phar.
Exploitation des PDOs
Le constructeur de la classe PDO permet des connexions aux bases de données via des chaînes DSN, permettant potentiellement la création de fichiers ou d'autres interactions:
SoapClient/SimpleXMLElement XXE
Les versions de PHP jusqu'à 5.3.22 et 5.4.12 étaient vulnérables aux attaques XXE à travers les constructeurs SoapClient
et SimpleXMLElement
, en fonction de la version de libxml2.
RCE via l'extension Imagick
Dans l'analyse des dépendances d'un projet, il a été découvert que Imagick pouvait être utilisé pour l'exécution de commandes en instanciant de nouveaux objets. Cela offre une opportunité d'exploiter des vulnérabilités.
Analyseur VID
La capacité de l'analyseur VID à écrire du contenu dans n'importe quel chemin spécifié dans le système de fichiers a été identifiée. Cela pourrait permettre de placer un shell PHP dans un répertoire accessible via le web, permettant ainsi l'exécution de code à distance (RCE).
Analyseur VID + Téléchargement de fichiers
Il est noté que PHP stocke temporairement les fichiers téléchargés dans /tmp/phpXXXXXX
. L'analyseur VID dans Imagick, en utilisant le protocole msl, peut gérer des jokers dans les chemins de fichiers, facilitant le transfert du fichier temporaire vers un emplacement choisi. Cette méthode offre une approche supplémentaire pour réaliser l'écriture de fichiers arbitraires dans le système de fichiers.
Plantage PHP + Force brute
Une méthode décrite dans le rapport original implique le téléchargement de fichiers qui provoquent un plantage du serveur avant leur suppression. En effectuant une attaque par force brute sur le nom du fichier temporaire, il devient possible pour Imagick d'exécuter du code PHP arbitraire. Cependant, cette technique s'est avérée efficace uniquement dans une version obsolète d'ImageMagick.
Références
Last updated