- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
Dans la situation où vous pouvez créer un nouvel objet arbitraire comme `new $_GET["a"]($_GET["a"])`, vous pourriez être en mesure d'obtenir une RCE, et [**cet article**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) expose différentes façons d'obtenir une RCE.
Dans la construction `new $a($b)`, la **variable `$a` représente le nom de la classe** pour laquelle l'objet sera créé, et la variable **`$b` représente le premier argument** qui sera passé au constructeur de l'objet.
Si `$a` et `$b` proviennent de GET/POST, ils peuvent être **des chaînes de caractères ou des tableaux de chaînes de caractères**. S'ils proviennent de **JSON** ou d'ailleurs, ils **peuvent avoir d'autres types**, tels que des objets ou des booléens.
Lorsqu'il n'y a pas de classes exploitables dans votre application, ou que la classe nécessaire se trouve dans un fichier séparé qui n'est pas inclus par le code vulnérable, vous pouvez jeter un coup d'œil aux fonctions d'autoload.
Les **fonctions d'autoload** sont définies en enregistrant des rappels via `spl_autoload_register` ou en définissant `__autoload`. Elles sont appelées lorsqu'une instance d'une classe inconnue est en train d'être créée.
# An example of an autoloading function, works only in PHP < 8.0
function __autoload($class_name) {
include $class_name . '.php';
};
# Calling spl_autoload_register with no arguments enables the default autoloading function, which includes lowercase($classname) + .php/.inc from include_path
Selon la version de PHP et le code dans les fonctions d'autoloading, il peut exister des moyens d'obtenir une exécution de code à distance via l'autoloading.
Il existe de 100 à 200 classes PHP intégrées. Le nombre d'entre elles dépend de la version de PHP et des extensions installées. Toutes les classes intégrées peuvent être répertoriées via la fonction `get_declared_classes`, ainsi que les classes personnalisées :
Si vous contrôlez **plusieurs paramètres de constructeur et pouvez appeler des méthodes arbitraires** par la suite, il existe de nombreuses façons d'obtenir une exécution de code à distance. Mais si vous ne pouvez passer **qu'un seul paramètre et n'avez aucun appel** à l'objet créé, il n'y a **presque rien**.
Le constructeur `PDO` accepte des chaînes DSN, ce qui nous permet de **se connecter à n'importe quelle base de données locale ou distante** en utilisant les **extensions de base de données installées**. Par exemple, l'extension SQLite peut créer des fichiers vides.
Dans PHP ≤ 5.3.22 et ≤ 5.4.12, le constructeur de SoapClient était **vulnérable à XXE**. Le constructeur de SimpleXMLElement était également vulnérable à XXE, mais il nécessitait libxml2 <2.9.
En vérifiant les **dépendances** du **projet** que vous essayez d'exploiter, vous pouvez trouver des **nouvelles classes** qui pourraient être **abusées pour exécuter des commandes** en créant un nouvel objet. Dans ce cas, **Imagick** s'est avéré utile à cette fin.
L'analyseur VID permet d'écrire un contenu arbitraire dans un chemin arbitraire à l'intérieur du système de fichiers, ce qui permettrait à un attaquant d'écrire un PHPshell dans un dossier accessible depuis la page web et d'obtenir une RCE.
Lorsqu'un fichier est téléchargé sur PHP, il est temporairement stocké dans `/tmp/phpXXXXXX`. L'analyseur VID d'Imagick avec le protocole **msl** permet de **spécifier des caractères génériques dans les chemins de fichiers** (de sorte que le fichier téléchargé temporaire peut être facilement accessible) et de **le copier dans n'importe quel emplacement arbitraire**.\
C'est une autre façon d'obtenir l'écriture de fichiers arbitraires dans le système de fichiers :
Le [**writeup original**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) expliquait une autre façon d'obtenir une RCE en **téléchargeant des fichiers avec un contenu spécifique** et en faisant **planter le serveur avant qu'il ne supprime** ce fichier, puis en **bruteforçant le nom** du fichier temporaire jusqu'à ce qu'**Imagick exécute du code PHP arbitraire**.
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.