Drupal RCE
Mit dem PHP-Filtermodul
In älteren Versionen von Drupal (vor Version 8) war es möglich, sich als Administrator anzumelden und das PHP-Filter
-Modul zu aktivieren, das es ermöglicht, "Eingebetteten PHP-Code/Snippets auszuwerten". Ab Version 8 ist dieses Modul jedoch nicht mehr standardmäßig installiert.
Sie benötigen das Plugin PHP, das installiert sein muss (überprüfen Sie dies, indem Sie auf /modules/php zugreifen und wenn es eine 403 zurückgibt, dann existiert es, wenn nicht gefunden, dann ist das Plugin PHP nicht installiert)
Gehen Sie zu Module -> (Überprüfen Sie) PHP-Filter -> Konfiguration speichern
Klicken Sie dann auf Inhalt hinzufügen -> Wählen Sie Grundlegende Seite oder Artikel -> Schreiben Sie PHP-Shellcode im Body -> Wählen Sie PHP-Code im Textformat -> Wählen Sie Vorschau
Greifen Sie schließlich einfach auf den neu erstellten Knoten zu:
Installieren des PHP-Filter-Moduls
In aktuellen Versionen ist es nicht mehr möglich, Plugins nur über den Webzugriff nach der Standardinstallation zu installieren.
Ab Version 8 wird das PHP-Filter Modul nicht mehr standardmäßig installiert. Um diese Funktionalität zu nutzen, müssen wir das Modul selbst installieren.
Laden Sie die neueste Version des Moduls von der Drupal-Website herunter.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
Nach dem Download gehen Sie zu
Verwaltung
>Berichte
>Verfügbare Updates
.Klicken Sie auf
Durchsuchen
, wählen Sie die Datei aus dem Verzeichnis aus, in das wir sie heruntergeladen haben, und klicken Sie dann aufInstallieren
.Nachdem das Modul installiert ist, können wir auf
Inhalt
klicken und eine neue Grundseite erstellen, ähnlich wie im Beispiel für Drupal 7. Stellen Sie erneut sicher, dass SiePHP-Code
aus dem Dropdown-MenüTextformat
auswählen.
Backdoored-Modul
In aktuellen Versionen ist es nicht mehr möglich, Plugins nur über den Webzugriff nach der Standardinstallation zu installieren.
Ein backdoored Modul kann erstellt werden, indem eine Shell zu einem vorhandenen Modul hinzugefügt wird. Module können auf der drupal.org-Website gefunden werden. Wählen wir ein Modul wie CAPTCHA aus. Scrollen Sie nach unten und kopieren Sie den Link für das tar.gz-Archiv.
Laden Sie das Archiv herunter und extrahieren Sie dessen Inhalt.
Erstellen Sie eine PHP-Webshell mit dem Inhalt:
Als nächstes müssen wir eine
.htaccess
-Datei erstellen, um uns Zugriff auf den Ordner zu verschaffen. Dies ist notwendig, da Drupal den direkten Zugriff auf den/modules
-Ordner verweigert.
Die oben genannte Konfiguration wird Regeln für den / Ordner anwenden, wenn wir eine Datei in /modules anfordern. Kopieren Sie beide Dateien in den Captcha-Ordner und erstellen Sie ein Archiv.
Angenommen, wir haben administrativen Zugriff auf die Website, klicken Sie auf
Verwalten
und dann aufErweitern
in der Seitenleiste. Klicken Sie anschließend auf die Schaltfläche+ Neues Modul installieren
, und Sie gelangen zur Installationsseite, z. B.http://drupal-site.local/admin/modules/install
. Navigieren Sie zum manipulierten Captcha-Archiv und klicken Sie aufInstallieren
.Nach erfolgreicher Installation navigieren Sie zu
/modules/captcha/shell.php
, um Befehle auszuführen.
Backdooring von Drupal mit Konfigurationssynchronisation
Beitrag geteilt von Coiffeur0x90
Teil 1 (Aktivierung von Media und Media Library)
Im Erweitern Menü (/admin/modules) können Sie scheinbar bereits installierte Plugins aktivieren. Standardmäßig scheinen die Plugins Media und Media Library nicht aktiviert zu sein, also lassen Sie uns sie aktivieren.
Vor der Aktivierung:
Nach der Aktivierung:
Teil 2 (Nutzung der Funktion Konfigurationssynchronisation)
Wir werden die Funktion Konfigurationssynchronisation nutzen, um Drupal-Konfigurationseinträge zu dumpen (exportieren) und hochzuladen (importieren):
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Patch system.file.yml
Beginnen wir mit dem Patchen des ersten Eintrags allow_insecure_uploads
von:
Datei: system.file.yml
Zu:
Datei: system.file.yml
Patch field.field.media.document.field_media_document.yml
Dann patchen Sie den zweiten Eintrag file_extensions
von:
Datei: field.field.media.document.field_media_document.yml
Zu:
Datei: field.field.media.document.field_media_document.yml
Ich verwende es nicht in diesem Blogbeitrag, aber es ist zu beachten, dass es möglich ist, den Eintrag
file_directory
beliebig zu definieren und dass er anfällig für einen Pfadtraversierungsangriff ist (so dass wir innerhalb des Drupal-Dateisystems nach oben gehen können).
Teil 3 (Nutzung des Features Dokument hinzufügen)
Der letzte Schritt ist der einfachste und wird in zwei Teilschritte unterteilt. Der erste besteht darin, eine Datei im .htaccess-Format hochzuladen, um die Apache-Direktiven zu nutzen und .txt-Dateien vom PHP-Engine interpretieren zu lassen. Der zweite Schritt besteht darin, eine .txt-Datei hochzuladen, die unser Payload enthält.
Datei: .htaccess
Warum ist dieser Trick cool?
Weil, sobald die Webshell (die wir LICENSE.txt nennen werden) auf den Webserver hochgeladen wird, können wir unsere Befehle über $_COOKIE
übertragen und in den Webserver-Logs wird dies als legitimer GET-Request zu einer Textdatei angezeigt.
Warum nennen wir unsere Webshell LICENSE.txt?
Einfach weil, wenn wir die folgende Datei nehmen, zum Beispiel core/LICENSE.txt (die bereits im Drupal-Kern vorhanden ist), haben wir eine Datei mit 339 Zeilen und 17,6 KB Größe, die perfekt ist, um einen kleinen PHP-Code-Schnipsel in der Mitte hinzuzufügen (da die Datei groß genug ist).
Datei: Gepatchte LICENSE.txt
Teil 3.1 (Datei .htaccess hochladen)
Zunächst nutzen wir die Funktion Dokument hinzufügen (/media/add/document), um unsere Datei mit den Apache-Direktiven (.htaccess) hochzuladen.
Teil 3.2 (Datei LICENSE.txt hochladen)
Dann nutzen wir erneut die Funktion Dokument hinzufügen (/media/add/document), um eine Webshell hochzuladen, die in einer Lizenzdatei versteckt ist.
Teil 4 (Interaktion mit der Webshell)
Der letzte Teil besteht darin, mit der Webshell zu interagieren.
Wie im folgenden Screenshot gezeigt, erhalten wir das nachfolgende Ergebnis, wenn der von unserer Webshell erwartete Cookie nicht definiert ist und wir die Datei über einen Webbrowser konsultieren.
Wenn der Angreifer das Cookie setzt, kann er mit der Webshell interagieren und beliebige Befehle ausführen.
Und wie Sie in den Logs sehen können, scheint nur eine txt-Datei angefordert worden zu sein.
Vielen Dank, dass Sie sich die Zeit genommen haben, diesen Artikel zu lesen. Ich hoffe, er hilft Ihnen, einige Shells zu erhalten.
Last updated