Drupal RCE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
W starszych wersjach Drupala (przed wersją 8), możliwe było zalogowanie się jako administrator i włączenie modułu PHP filter
, który "Pozwala na ocenę osadzonego kodu/snippetów PHP." Jednak od wersji 8 ten moduł nie jest instalowany domyślnie.
Przejdź do /modules/php i jeśli zwrócony zostanie błąd 403, to moduł PHP filter jest zainstalowany i możesz kontynuować
Jeśli nie, przejdź do Modules
i zaznacz pole PHP Filter
, a następnie kliknij Save configuration
Następnie, aby to wykorzystać, kliknij Add content
, wybierz Basic Page
lub Article
i napisz tylną furtkę PHP, następnie wybierz kod PHP
w formacie tekstowym i na koniec wybierz Preview
Aby to uruchomić, po prostu uzyskaj dostęp do nowo utworzonego węzła:
W aktualnych wersjach nie jest już możliwe instalowanie wtyczek tylko przy dostępie do sieci po domyślnej instalacji.
Od wersji 8 wzwyż, moduł PHP Filter nie jest instalowany domyślnie. Aby skorzystać z tej funkcjonalności, musimy zainstalować moduł samodzielnie.
Pobierz najnowszą wersję modułu ze strony Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
Po pobraniu przejdź do Administracja
> Raporty
> Dostępne aktualizacje
.
Kliknij Przeglądaj
, wybierz plik z katalogu, do którego go pobrano, a następnie kliknij Zainstaluj
.
Po zainstalowaniu modułu możemy kliknąć na Treść
i utworzyć nową stronę podstawową, podobnie jak w przykładzie Drupal 7. Ponownie upewnij się, że wybrałeś Kod PHP
z rozwijanego menu Format tekstu
.
W aktualnych wersjach nie jest już możliwe instalowanie wtyczek tylko przy dostępie do sieci po domyślnej instalacji.
Możliwe było pobranie modułu, dodanie do niego tylnego wejścia i zainstalowanie go. Na przykład, pobierając moduł Trurnstile w formacie skompresowanym, tworząc nowy plik PHP z tylnym wejściem wewnątrz niego, umożliwiając dostęp do pliku PHP za pomocą pliku .htaccess
:
I następnie przechodzimy do http://drupal.local/admin/modules/install
, aby zainstalować moduł z backdoorem i uzyskać dostęp do /modules/turnstile/back.php
, aby go wykonać.
Post udostępniony przez Coiffeur0x90
W menu Rozszerzenia (/admin/modules) możesz aktywować to, co wydaje się być już zainstalowanymi wtyczkami. Domyślnie wtyczki Media i Media Library nie wydają się być aktywowane, więc aktywujmy je.
Przed aktywacją:
Po aktywacji:
Wykorzystamy funkcję Synchronizacja konfiguracji, aby zrzucić (eksportować) i przesłać (importować) wpisy konfiguracji Drupal:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Patch system.file.yml
Zacznijmy od załatania pierwszego wpisu allow_insecure_uploads
z:
Plik: system.file.yml
Do:
Plik: system.file.yml
Patch field.field.media.document.field_media_document.yml
Następnie, załatw drugi wpis file_extensions
z:
Plik: field.field.media.document.field_media_document.yml
Do:
Plik: field.field.media.document.field_media_document.yml
Nie używam tego w tym wpisie na blogu, ale zauważono, że możliwe jest zdefiniowanie wpisu
file_directory
w dowolny sposób i że jest on podatny na atak typu path traversal (więc możemy cofnąć się w drzewie systemu plików Drupal).
Ostatni krok jest najprostszy i dzieli się na dwa podkroki. Pierwszym jest przesłanie pliku w formacie .htaccess, aby wykorzystać dyrektywy Apache i umożliwić interpretację plików .txt przez silnik PHP. Drugim jest przesłanie pliku .txt zawierającego nasz ładunek.
Plik: .htaccess
Dlaczego ten trik jest fajny?
Ponieważ gdy Webshell (który nazwiemy LICENSE.txt) zostanie umieszczony na serwerze WWW, możemy przesyłać nasze polecenia za pomocą $_COOKIE
, a w logach serwera WWW pojawi się to jako legalne żądanie GET do pliku tekstowego.
Dlaczego nazywamy nasz Webshell LICENSE.txt?
Po prostu dlatego, że jeśli weźmiemy następujący plik, na przykład core/LICENSE.txt (który już znajduje się w rdzeniu Drupal), mamy plik o długości 339 linii i rozmiarze 17,6 KB, co jest idealne do dodania małego fragmentu kodu PHP w środku (ponieważ plik jest wystarczająco duży).
Plik: Zaktualizowany LICENSE.txt
Najpierw wykorzystujemy funkcję Dodaj dokument (/media/add/document), aby przesłać nasz plik zawierający dyrektywy Apache (.htaccess).
Część 3.2 (prześlij plik LICENSE.txt)
Następnie ponownie wykorzystujemy funkcję Dodaj dokument (/media/add/document), aby przesłać Webshell ukryty w pliku licencyjnym.
Ostatnia część polega na interakcji z Webshell.
Jak pokazano na poniższym zrzucie ekranu, jeśli ciasteczko oczekiwane przez nasz Webshell nie jest zdefiniowane, otrzymujemy następujący wynik podczas konsultacji pliku za pomocą przeglądarki internetowej.
Gdy atakujący ustawi ciasteczko, może interagować z Webshell i wykonywać dowolne polecenia, które chce.
Jak widać w logach, wygląda na to, że żądany był tylko plik txt.
Dziękuję za poświęcenie czasu na przeczytanie tego artykułu, mam nadzieję, że pomoże Ci zdobyć kilka powłok.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)