• OĞUZHAN YILDIRIM

Vulnhub | Me and My Girlfriend | Write Up

Bugünkü yazımda sizlere vulnhub.com üzerinden çözmüş olduğum makineyi anlatacağım. Vulnhub topluluklar sayesinde oluşturulmuş, içinde vulnerable yani zafiyetler bulunduran sanal makinelerin olduğu bir platform. Platformda farklı senaryoların olduğu makineleri çözerek sonucunda bayrağı elde etmeye çalışıyoruz. Bunlardan bazılarını CTF(Capture The Flag) olarak da adlandırabiliriz. CTF, Siber Güvenlik alanında yapılan, öğretici ve farklı bakış açıları kazandıran challenge(meydan okuma)lardır.

İlk olarak makinemizi indiriyoruz.

Makinemizin senaryosuna gelecek olursak bu sanal makine bize, Alice ve Bob adında bir çiftten bahsediyor. Alice özel bir şirket olan Ceban Corp'da çalışmaya başladığından beri Bob'a karşı tutumunda bir şeyler değişiyor. Bob'da şüphelendiği için bizden yardım istiyor. Görevimiz Alice'in kişisel bilgilerine erişip Bob'u bilgilendirmek oluyor.

Daha sonra indirdiğimiz .ova uzantılı dosyamızı VMware(Sanal Makine çalıştıran program) ile açıyoruz.
İndirdiğimiz makineyi açtıktan sonra uzaktan bağlanıp işlemlerimizi gerçekleştireceğimiz ana makinemizi de başlatıyoruz.
Buraya kadar temel yapmamız gereken kurulumları ve işlemleri hallettik. Ve artık içeri girmeye hazırız.

İlk olarak ağımdaki cihazları görebilmek için netdiscover komutunu kullanıyorum. Buraya ufak bir parantez açalım.

  • netdiscover nedir ? ne işe yarar ?

netdiscover Linux sistemlerinde kullanılan bir tool(araç)dur. Ağdaki bilgisayarları tarayıp bize MAC adreslerini ve IP adreslerini verir. MAC adresi bilgisayarımızın ağ kartının adresidir. IP adresi ise internet ortamında iletişim kurmak ve bilgi alışverişi içinde bulunmak için kullanılan ağ kimliğidir.


Kullanımı
sudo netdiscover

Ağ taramasını tamamladım ve bulduğum sonuçlar aşağıdaki gibi.

4 tane sonuca ulaştım bu IP adreslerinden 3 tanesi VMware'in bana verdiği stabil IPler. Bana lazım olan IP adresi 192.168.109.134

Network Mapper yani nmap ile ağ taraması ve zafiyet tespiti.

Nmap'e şimdi girersem yazının inanılmaz derecede uzayacağını biliyorum daha detaylı bir şekilde başka bir yazımda anlatacağım kendisini. Kısaca özetlemek gerekirse nmap üzerinde bulunan modüller sayesinde port taraması, servis keşfi, versiyon ve işletim sistemi tespiti gerçekleştirebilir. Ben burda nmapi hangi portların açık olduğunu görmek için kullanıyorum.

Kullanımı
sudo nmap -A 192.168.109.134

Benim burada direkt dikkatimi 22/ssh (Secure Shell) çekiyor. SSH nedir kısaca açıklayayım. Kullanıcılara sunucularını internet üzerinden kontrol etmesini ve düzenlemesini sağlayan uzak yönetim protokolüdür. Bunu öğrendiğim için gidip tarayıcıda adresi giriyorum.

Bulduğumuz adresi Firefox internet tarayıcıyı açıp giriyorum.

Siteye girdiğimde beni bir mesaj karşıladı. "Who are you? Hacker? Sorry This Site Can Only Be Accessed local!" Türkçe çevirisine gelecek olursak "Sen de kimsin ? Hacker ? Üzgünüm bu siteye sadece yerel olarak erişilebilir." Siteye uzaktan erişemeyeceğimi anladıktan sonra bir açık var mı diye sitenin kaynak kodlarına bakmaya karar verdim.

Kaynak kodlarını görmek için siteye gelip sağ tıkladıktan sonra "View Selection Source" dedim.

Gayet iyi ilerlediğimi düşünüyordum. Çünkü kaynak kodlarının arasında bir hint(ipucu) yakalamıştım. "Maybe you can search how to use x-forwarded-for" Türkçe çevirisine gelecek olursak "Belki x-forwarded-for'un nasıl kullanılacağını araştırabilirsin." O zaman X-Forwarded-For'un ne işe yaradığına bir göz atalım.


  • X-Forwarded-For nedir ? ne işe yarar ?

Öncelikle proxyden bahsetmek istiyorum. Proxy vekil sunucu demektir. İnternete erişim sırasında kullanılan ara sunucudur. Bir ağ sayfasına bağlanmak istediğimizde bu gönderdiğimiz istek ilk olarak proxyimize yani vekil sunucumuza düşecektir. Daha sonra vekil sunucu üzerinden bağlanmak isterseniz onaylayıp bağlanabilirsiniz.


Gelelim XFF'e. XFF genelde loglama amacı ile kullanılır. Bu şekilde siteyi ziyaret eden kişinin gerçek IP adresini log kayıtlarına aktarır. XFF aynı zamanda şunlar içinde kullanılır.

  1. Belirli istekleri web sunucusu log'larından bağımsız olarak kaydetmek.

  2. Kullanıcıya gerçek IP adresini göstermek.

  3. Kullanıcının IP adres bilgisine dayanarak Internet üzerinden kullanıcıya doğru hangi port'ların açık olup olmadığını kontrol etmek.

İlk olarak Proxy için Burpsuite programını açıyorum.

Proxy kullanmak için Burpsuite programını kullanacağım. Burpsuite benimle sunucu arasındaki istekleri görebileceğim bir yazılım. Böylece istekleri istediğim gibi değiştirip yönlendirebileceğim. Programı açtıktan sonra önce Proxy kısmına geliyorum. Daha sonra Options kısmına geldiğimde beni aşağıdaki sayfa karşılıyor. Burada vekil sunucumu görüyorum 127.0.0.1:8080 adresi artık benim vekil sunucum.

Vekil sunucumun adresini öğrendikten sonra proxy ayarlarını yapmak için tekrardan Firefox'a dönüyorum. URL yazdığımız kısma gelip about:preferences yazdıktan sonra aşağıdaki sayfaya ulaşıyorum. Orada da arama kısmına proxy yazarak Network Settingse geliyorum.

Settingse tıklayıp ayarlarımı yapmaya başlıyorum. Vekil sunucumun IPsini giriyorum. (127.0.0.1) Daha sonra portumu da giriyorum. (8080) Böylece proxy ayarlarımı bitirmiş bulunuyorum. Artık istek göndermeye hazırım.

Her şey hazır olduğu için artık siteye istek gönderebilirim.

Siteye tekrardan gelip yeniliyorum ve sonuç aşağıdaki gibi. Resmin sol üst köşesinde kırmızı ile işaretlediğim kısıma bakarsanız dönüp duruyor ve yanıt veremiyor. Çünkü attığım istek önce benim vekil sunucuma düştü. Proxy kısmından Intercept'e geldiğimizde isteği görebiliyoruz. Forward'a tıkladığımda istek tamamen gidecek ve sayfa yenilenecek. Bunun öncesinde en başta bize verdiği ipucundan dolayı burada biraz değişiklik yapalım.

10. satıra gelip aşağıdaki kodu ekliyorum ve isteği böyle gönderiyorum.

X-Forwarded-For: localhost
Ve evet artık içerideyim.

Kısa bir işlemin ardından siteye eriştim. Ana sayfasında biraz gezindikten sonra menüden diğer sayfalara da şöyle bir göz attım. En son Register kısmına gelip kendimi de kullanıcı olarak kaydetmeye karar verdim.

Kayıt olduktan sonra gezinmeye devam ettim. Profile kısmına geldiğimde dikkatimi bir şey çekti. URL'deki &user_id=14 kısmı. Demek ki benden önce kayıt olan 13 tane kullanıcı daha var ve ben 14. kullanıcıyım. Deneme yanılma yoluyla &user_id=1,2,3,4,5... diye gezmeye başladım.

Bingo. Dediğim gibi kullanıcıları gezmeye başladıkça ortaya diğer kullanıcılar çıktı.

Hepsini bir not defteri açarak not aldım.

Not aldıktan sonra kaynak kodlarına tekrar baktım ve parolaların hepsi görünür biçimdeydi. Bütün kullanıcıların parolalarını da çektim not defterine.

Kendime kadar baktıktan sonra ID 5'ten sonrası yoktu. En son elimde şöyle bir liste oluştu.

Hedefimizin;

Kullanıcı adı: Alice

Parolası: 4lic3

Tüm bunları bulduktan sonra dirb ile web içeriğini taramaya karar verdim.

Size ufak dirb'ten bahsedeyim. dirb bizim ona verdiğimiz adresteki görünür ve görünür olmayan tüm dizinleri listeleyen yazılımdır. Her şeyin sadece sitenin görünürlüğünden var olmadığını öğrenebileceğimiz kullanışlı bir tool kendisi. Böylece site içindeki tüm dizinleri görmüş olacağız.

Kullanımı
dirb http://192.168.109.134 

Burada benim ilk dikkatimi çeken robots.txt oluyor. robots.txt dosyası, arama motoru tarayıcılarının sitenizde erişmesini istemediğiniz yerleri gösteren ve sitenizin kök dizininde bulunan bir dosyadır. Girip hemen inceliyorum tabii ki.

Bingo. Bana /heyhoo.txt diye bir kısım daha olduğunu gösteriyordu. Aynı şekilde oraya da giriyorum.

"Great! What you need now is reconn, attack and got the shell." mesajı ile karşılaşıyorum girince. Türkçe çevirisine bakacak olursak "Harika! Şimdi ihtiyacın olan şey yeniden bağlanmak, saldırmak ve kabuğu ele geçirmek." yavaş yavaş işin sonuna doğru yaklaşıyorum.

Tüm verileri topladıktan sonra değerlendirme yaptım.

Siteden çekebildiğim tüm verileri aldım. Kullanıcıları topladım. Hedef kullanıcının adı ve parolası da elimde. Hatırlarsanız yazının başında hangi protokolde çalıştığına bakmıştık(SSH). Artık elimde hedefin bilgileri de olduğuna göre sistemine erişebilirim.

Kullanımı
ssh alice@192.168.109.134

ve artık Alice'in bilgisayarının içindeyim. Biraz gezintiye çıkıyorum dosyalarını inceliyorum.

Flag 1'i buldum ve Alice'in notunu okudum.

Gezinirken birkaç komut kullandım onları da kısaca açıklayayım.


ls -la

ls komutu ile listeleme işlemi yapıyoruz. Sonuna -la eklediğimizde ise gizli dosyaları da görebiliyoruz.

cd .my_secret/

cd komutu ile my secret adlı dosyaya gittim.

cat flag1.txt

cat komutu ile de okuma işlemini yapıyorum.

flag1.txt dosyasının içeriği

Greattttt my brother! You saw the Alice's note! Now you save the record information to give to bob! I know if it's given to him then Bob will be hurt but this is better than Bob cheated!


Now your last job is get access to the root and read the flag ^_^


Çeviri:


Alice'in notunu gördün! Şimdi bulduklarını Bob'a vermek için kaydet ! Ona bulduklarını verdiğinde Bob incinecek ama aldatılmasından iyidir !


Şimdi son işin root'a erişmek ve bayrağı okumak.


Flag 1 : gfriEND{2f5f21b2af1b8c3e227bcf35544f8f09}


my_notes.txt dosyasının içeriği

Woahhh! I like this company, I hope that here i get a better partner than bob ^_^, hopefully Bob doesn't know my notes .


Çeviri:


Bu şirketi seviyorum, umarım burada Bob'dan daha iyi birini bulurum ve umarım bob notlarımı bilmiyordur.

Şimdi root olma zamanı.

Makinenin sonuna doğru gelirken bizden en son istenen sistemde root olup son bayrağı okumak.

sudo -l 

komutu ile phpyi root yetkisiyle kullanabildiğimi gördüm. Daha sonra gidip bana shell aldıracak script kodunu araştırdım.

sudo php -r "system('/bin/sh');"

Ve evet bitti. Artık gelebileceğimiz en yüksek seviyeye gelmiş bulunuyoruz. Her şeye erişimimiz mevcut durumda. Son olarak girip flag2.txt'yi okuyorum.

Flag2.txt dosyasının içeriği

Yeaaahhhh!! You have successfully hacked this company server! I hope you who have just learned can get new knowledge from here :) I really hope you guys give me feedback for this challenge whether you like it or not because it can be a reference for me to be even better! I hope this can continue :)

Contact me if you want to contribute / give me feedback / share your writeup!

Twitter: @makegreatagain_

Instagram: @aldodimas73

Thanks!


Çeviri:


"Bu şirket sunucusunu başarıyla hacklediniz!" bu kısım yeterli :)


Flag 2: gfriEND{56fbeef560930e77ff984b644fde66e7}

Buraya kadar geldiyseniz hepinize sonsuz teşekkürler. Eksiklerim olabilir. Yanlışlarım olabilir. Geribildirimde bulunursanız çok sevinirim. Başka makine çözümlerinde görüşmek üzere.

XFF KAYNAĞI:


https://www.webguvenligi.org/dergi/XForwardedForHTTPBasligininKotuyeKullanimi-Ekim2009-SertanKolat.pdf


PHP SCRIPT KAYNAĞI:


https://gtfobins.github.io/gtfobins/php/

128 görüntüleme0 yorum

Son Paylaşımlar

Hepsini Gör