PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Dies ist im Grunde eine Zusammenfassung von https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Die Erstellung neuer willkürlicher Objekte, wie new $_GET["a"]($_GET["a"])
, kann zu Remote Code Execution (RCE) führen, wie in einem Bericht detailliert beschrieben. Dieses Dokument hebt verschiedene Strategien zur Erreichung von RCE hervor.
Die Syntax new $a($b)
wird verwendet, um ein Objekt zu instanziieren, wobei $a
den Klassennamen darstellt und $b
das erste Argument ist, das an den Konstruktor übergeben wird. Diese Variablen können aus Benutzereingaben wie GET/POST stammen, wo sie Strings oder Arrays sein können, oder aus JSON, wo sie als andere Typen erscheinen könnten.
Betrachten Sie den folgenden Codeausschnitt:
In diesem Fall führt das Setzen von $a
auf App
oder App2
und $b
auf einen Systembefehl (z.B. uname -a
) zur Ausführung dieses Befehls.
Autoloading-Funktionen können ausgenutzt werden, wenn solche Klassen nicht direkt zugänglich sind. Diese Funktionen laden automatisch Klassen aus Dateien, wenn sie benötigt werden, und sind definiert mit spl_autoload_register
oder __autoload
:
Das Verhalten des Autoloadings variiert je nach PHP-Version und bietet unterschiedliche RCE-Möglichkeiten.
Ohne benutzerdefinierte Klassen oder Autoloader können eingebaute PHP-Klassen für RCE ausreichen. Die Anzahl dieser Klassen liegt je nach PHP-Version und Erweiterungen zwischen 100 und 200. Sie können mit get_declared_classes()
aufgelistet werden.
Konstruktoren von Interesse können über die Reflection-API identifiziert werden, wie im folgenden Beispiel und dem Link https://3v4l.org/2JEGF gezeigt.
RCE über spezifische Methoden umfasst:
Die Klasse SplFileObject
ermöglicht SSRF über ihren Konstruktor und erlaubt Verbindungen zu jeder URL:
SSRF kann in PHP-Versionen vor 8.0 zu Deserialisierungsangriffen führen, wenn das Phar-Protokoll verwendet wird.
Der Konstruktor der PDO-Klasse ermöglicht Verbindungen zu Datenbanken über DSN-Strings, was potenziell die Erstellung von Dateien oder andere Interaktionen ermöglicht:
Versionen von PHP bis 5.3.22 und 5.4.12 waren anfällig für XXE-Angriffe über die SoapClient
- und SimpleXMLElement
-Konstruktoren, abhängig von der Version von libxml2.
Bei der Analyse der Abhängigkeiten eines Projekts wurde festgestellt, dass Imagick für die Befehlsausführung durch die Instanziierung neuer Objekte genutzt werden kann. Dies bietet eine Möglichkeit, Schwachstellen auszunutzen.
Die Fähigkeit des VID-Parsers, Inhalte an einen beliebigen angegebenen Pfad im Dateisystem zu schreiben, wurde identifiziert. Dies könnte zur Platzierung einer PHP-Shell in einem webzugänglichen Verzeichnis führen, was Remote Code Execution (RCE) ermöglicht.
Es wird angemerkt, dass PHP hochgeladene Dateien vorübergehend in /tmp/phpXXXXXX
speichert. Der VID-Parser in Imagick, der das msl-Protokoll verwendet, kann Platzhalter in Dateipfaden verarbeiten, was den Transfer der temporären Datei an einen gewählten Ort erleichtert. Diese Methode bietet einen zusätzlichen Ansatz, um beliebige Dateien im Dateisystem zu schreiben.
Eine Methode, die im originalen Bericht beschrieben wird, beinhaltet das Hochladen von Dateien, die einen Serverabsturz auslösen, bevor sie gelöscht werden. Durch Brute-Forcing des Namens der temporären Datei wird es möglich, dass Imagick beliebigen PHP-Code ausführt. Diese Technik wurde jedoch nur in einer veralteten Version von ImageMagick als effektiv befunden.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)