Merhaba TürkHackTeam ailesi, bugün Tryhackme de bulunan zor seviye linux makine'sinin çözümünü yazacağım.
Öncelikle scope kapsamına bakıyoruz ve blackbox pentest yapmamız ayrıca 2 adet flag bulmamız istenmiş.
Dns çözümlemesi için internal.thm ve ip adresini /etc/hosts dosyasına yazıyoruz.
Nmap taraması ile başlayalım bakalım hangi portlar açık.
Bir SSH ve bir bir Apache server'ın çalıştığını görüyoruz.
Apache server'ı incelediğimiz de herhangi bir detay yok peki o zaman saldırı yüzey'imizi genişletmek için herhangi bir subdomain bulabilecekmiyiz bakalım, ffuf aracı ile subdoamin keşfine başlıyoruz.
Görünüşe göre farklı bir subdomain yok, o zaman gizli dizin var mı yok mu ona bir bakalım.
Burada ilgimizi çeken WordPress sayfasını inceliyoruz.
Ana sayfa da herhangi ilginç birşey gözükmüyor o zaman Wpscan aracı ile bakalım zafiyetli eklenti veya tema var mı?
Zafiyetli eklenti veya tema bulamadık fakat WordPress REST API üzerindeki /wp-json/wp/v2/users endpoint’i herkese açık olduğu için kullanıcı adı admin bilgisisini elde ettik ayrıca ilgimizi çeken diğer ayrıntı ise Xmlrpc'nin aktif olması.
Burda zayıf kimlik bilgisi bulabilmek için bir brute force denemesi yapıyoruz.
Admin kullanıcısına ait şifreyi de bulduğumuza göre wp-login.php üzerinden giriş yapabiliriz.
Sisteme başarıyla giriş yaptık'tan sonra Appearance bölümünden comments.php dosyasını seçiyoruz ve buraya php reverse shell'imizi yapıştırıyoruz.
Dosyayı kaydetdikten sonra bir netcat dinleyici'si başlatıyoruz ve reverse shell'imizin olduğu dizini ziyaret ediyoruz.
Evet başarılı bir şekilde kabuk aldık şimdi sahip olduğumuz shell'i tam etkileşimli bir TTY shell'ine yükseltiyoruz.
Burada crontab'ı kontrol ettik ama root herhangi birşey çalıştırmıyor SUID/SGID leri de kontrol ettik ama ilgi çeken yine herhangi birşey yok daha sonra /var/www/html dizinine gitttiğimizde bir wp-config.php dosyası buluyoruz.
Dosyanın içeriğine baktığımız da WordPress'e ait bir database bilgisi buluyoruz.
Bakalım burada herhangi bir sonuç bulabilecekmiyiz.
Mysql ile database'e bağlanıyoruz.
Admin'e ait bir hash ve mail adres'i dışında pek birşey yok gibi gözüküyor tekrar geri dönerek sistem içerisinde geziniyoruz.
/opt dizininde bir wp-save.txt adlı dosya buluyoruz ve içerisinde kullanıcıya ait bir kimlik bilgisi buluyoruz.
Kullanıcımıza bağlandıktan sonra ilk flag'ı buluyoruz ve jenkins.txt adlı bir dosya daha var içerisini kontrol ettiğimizde ise.
Docker bridge ağı 172.17.0.0/16 üzerinde yalnızca internal erişime açık olan Jenkins servisini 172.17.0.2:8080 çalıştığını söylüyor.
Kısaca bu Jenkins'in dış dünyaya kapalı ve sadece local veya pivot ile erişilir olduğunu gösteriyor bize.
Tamam şimdi SSH local port forwarding yaparak bu Jenkins'e ulaşmaya çalışıyoruz.
"ssh -L 8081:172.17.0.2:8080 [email protected]"
Harika localhost üzerinden port fowarding yaparak Jenkins arayüzüne başarıyla ulaşıyoruz.
Burada Jenkins defaut login credential admin/password denedik ama işe yaramadı, tekrardan brute force denemek için Request Header ve Payload'ı kontrol ediyoruz.
Şimdi hydra aracı ile bir http-form-post gerçekleştiriyoruz bakalım bize şifre'yi bulabilecek mi?
Başarıyla credential bilgilerini bulduk devam edelim.
Jenkins arayüzüne de girdiğimize göre Manage kısmından Script Console bölümüne giriyoruz.
Daha sonra bizi bir Java console'u karşılıyor ve buraya pentestmonkey'in java reverse shell'ini yapıştırıyoruz.
Daha sonra kendi makinemizde bir netcat dinleyici başlatarak kabuğumuzu alıyoruz.
Burada tekrardan crontab'i kontrol ettik sonuç yok
find -type f -perm -4000 2>/dev/null
komutu ile tekrardan SUID/SGID kontrol ettik fakat yine sonuç yok kernel sürümü de zafiyetli değil ve yine /opt dizininde root şifresi yer alıyordu buradan root'a geçiş yaptık burada ekran görüntüsü almayı unutmuşum (kusura bakmayın).
Ve böylece makine de başarılı bir şekilde root olduk.
Okuduğunuz için teşekkürler..
Son düzenleme:



