Drupal RCE
Last updated
Last updated
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)
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.
Musisz mieć zainstalowany plugin php (sprawdź, uzyskując dostęp do /modules/php i jeśli zwraca 403, to istnieje, jeśli nie znaleziono, to plugin php nie jest zainstalowany)
Przejdź do Modules -> (Sprawdź) PHP Filter -> Zapisz konfigurację
Następnie kliknij na Dodaj treść -> Wybierz Strona podstawowa lub Artykuł -> Napisz shellcode php w treści -> Wybierz kod PHP w Formacie tekstu -> Wybierz Podgląd
Na koniec 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 na 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 zrobiliśmy to 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.
Moduł z backdoorem można stworzyć przez dodanie powłoki do istniejącego modułu. Moduły można znaleźć na stronie drupal.org. Wybierzmy moduł taki jak CAPTCHA. Przewiń w dół i skopiuj link do archiwum tar.gz archiwum.
Pobierz archiwum i wypakuj jego zawartość.
Stwórz PHP web shell z zawartością:
Następnie musimy utworzyć plik .htaccess
, aby uzyskać dostęp do folderu. Jest to konieczne, ponieważ Drupal odmawia bezpośredniego dostępu do folderu /modules
.
Powyższa konfiguracja zastosuje zasady dla folderu /, gdy zażądamy pliku w /modules. Skopiuj oba te pliki do folderu captcha i utwórz archiwum.
Zakładając, że mamy dostęp administracyjny do strony, kliknij na Zarządzaj
a następnie Rozszerz
w pasku bocznym. Następnie kliknij przycisk + Zainstaluj nowy moduł
, a zostaniemy przeniesieni na stronę instalacji, taką jak http://drupal-site.local/admin/modules/install
. Przeglądaj archiwum z backdoored Captcha i kliknij Zainstaluj
.
Po pomyślnej instalacji, przejdź do /modules/captcha/shell.php
, aby wykonać polecenia.
Post udostępniony przez Coiffeur0x90
W menu Rozszerz (/admin/modules) możesz aktywować to, co wydaje się być już zainstalowanymi wtyczkami. Domyślnie wtyczki Media i Biblioteka mediów 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 patchowania 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 górę w drzewie systemu plików Drupal).
Ostatni krok jest najprostszy i dzieli się na dwa podkroki. Pierwszy to przesłanie pliku w formacie .htaccess, aby wykorzystać dyrektywy Apache i umożliwić interpretację plików .txt przez silnik PHP. Drugi to 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 przeglądania 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 shelli.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)