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)
Eski Drupal 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.
php eklentisinin yüklü olması gerekir ( /modules/php adresine erişerek kontrol edin ve 403 dönerse, mevcuttur, eğer bulunamazsa, o zaman php eklentisi yüklü değildir)
Modüller -> (Kontrol Et) PHP Filtre -> Yapılandırmayı kaydet
Ardından İçerik ekle -> Temel Sayfa veya Makale seçin -> Gövdeye php shellcode yazın -> Metin formatında PHP kodu seçin -> Önizleme seçin
Son olarak, 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 kurulmamıştır. Bu işlevselliği kullanmak için modülü kendimiz kurmamız gerekecek.
Modülün en son sürümünü Drupal web sitesinden 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şturun, 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.
Arka kapılı bir modül, mevcut bir modüle bir shell ekleyerek oluşturulabilir. Modüller drupal.org web sitesinde bulunabilir. CAPTCHA gibi bir modül seçelim. Aşağı kaydırın ve tar.gz arşivinin bağlantısını kopyalayın.
Arşivi indirin ve içeriğini çıkarın.
Aşağıdaki içerik ile bir PHP web shell oluşturun:
Sonra, kendimize klasöre erişim sağlamak için bir .htaccess
dosyası oluşturmamız gerekiyor. Bu, Drupal'ın /modules
klasörüne doğrudan erişimi reddetmesi nedeniyle gereklidir.
Yukarıdaki yapılandırma, /modules içinde bir dosya talep ettiğimizde / klasörü için kuralları uygulayacaktır. Bu iki dosyayı captcha klasörüne kopyalayın ve bir arşiv oluşturun.
Web sitesine yönetici erişimimiz olduğunu varsayarsak, yan menüde Yönet
ve ardından Genişlet
seçeneğine tıklayın. Sonra, + Yeni modül yükle
butonuna tıklayın ve bizi yükleme sayfasına yönlendirecek, örneğin http://drupal-site.local/admin/modules/install
Backdoored Captcha arşivine gidin ve Yükle
butonuna tıklayın.
Yükleme başarılı olduktan sonra, komutları çalıştırmak için /modules/captcha/shell.php
adresine gidin.
Paylaşan: Coiffeur0x90
Genişlet 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ş olan allow_insecure_uploads
'ı yamanlamaya 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:
Dosya: 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ükleyeceğimiz yükü içeren bir .txt dosyasıdır.
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.
Webshell'imize neden LICENSE.txt adını veriyoruz?
Basitçe, örneğin core/LICENSE.txt dosyasını alırsak (ki bu dosya Drupal çekirdeğinde zaten 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)
Ardından, bir lisans dosyası içinde gizlenmiş 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ıyoruz.
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)