Drupal RCE
Last updated
Last updated
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)
Drupal'ın eski sürümlerinde (sürüm 8'den önce), 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üklenmemektedir.
/modules/php adresine gidin ve eğer 403 hatası alıyorsanız, PHP filtre eklentisi yüklenmiştir ve devam edebilirsiniz
Eğer değilse, Modüller
kısmına gidin ve PHP Filter
kutusunu işaretleyin, ardından Yapılandırmayı kaydet
butonuna tıklayın
Sonra, bunu istismar etmek için İçerik ekle
butonuna tıklayın, ardından Temel Sayfa
veya Makale
seçin ve PHP arka kapısını yazın, ardından Metin formatında PHP
kodunu seçin ve son olarak Önizleme
seçin
Bunu tetiklemek için, yeni oluşturulan düğüme erişin:
Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web erişimi ile eklenti kurmak artık mümkün değildir.
8 ve sonrası sürümlerde, PHP Filter modülü varsayılan olarak kurulu değildir. Bu işlevselliği kullanmak için modülü kendimiz kurmalıyız.
Drupal web sitesinden modülün en son sürümünü indirin.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
İndirdikten sonra Yönetim
> Raporlar
> Mevcut güncellemeler
bölümüne gidin.
Gözat
butonuna tıklayın, indirdiğimiz dosyayı seçin ve ardından Kur
butonuna tıklayın.
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 formatı
açılır menüsünden PHP kodu
nu seçtiğinizden emin olun.
Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web erişimi ile eklenti 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:
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.
Gönderi paylaşan Coiffeur0x90
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:
Drupal konfigürasyon girişlerini dökmek (ihracat) ve yüklemek (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
Şuna:
Dosya: system.file.yml
Patch field.field.media.document.field_media_document.yml
Sonra, ikinci girişi file_extensions
'ı şu şekilde yamanız gerekir:
File: field.field.media.document.field_media_document.yml
Şuna:
Dosya: field.field.media.document.field_media_document.yml
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 yukarı geri gidebiliriz).
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üklediğimiz yükü içeren bir .txt dosyası yüklemektir.
Dosya: .htaccess
Neden bu hile 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 sunucu günlüklerinde, bir metin dosyasına yapılan meşru bir GET isteği olarak görünecektir.
Neden Webshell'imize LICENSE.txt adını veriyoruz?
Basitçe, örneğin core/LICENSE.txt dosyasını alırsak (ki bu dosya zaten Drupal çekirdeğinde mevcut), 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: Yamanmış LICENSE.txt
Öncelikle, Apache direktiflerini içeren dosyamızı yüklemek için Belge Ekle (/media/add/document) özelliğini kullanıyoruz (.htaccess).
Bölüm 3.2 (dosya yükle LICENSE.txt)
Sonra, bir lisans dosyası içinde gizli bir Webshell yüklemek için tekrar Belge Ekle (/media/add/document) özelliğini kullanıyoruz.
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 herhangi bir komutu ç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.
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)