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), 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ü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 Filtre 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 dizinden dosyayı seçin ve ardından Kur
butonuna tıklayın.
Modül kurulduktan sonra, İçerik
butonuna 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ç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.
İçeriği 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.
Varsayıyoruz ki web sitesine yönetici erişimimiz var, 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
Geri kapatılmış 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.
Aktivasyondan önce:
Aktivasyondan sonra:
Drupal yapı girişlerini dökme (ihracat) ve yükleme (ithalat) için Yapı Senkronizasyonu ö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
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
Ş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 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)