Merhabalar, bugün Batuhan Işıldak ile beraber Hackday:Albania’yı test edip bu laboratuvarımızda öğrendiğimiz bilgileri sizinle paylaşmak istedik. Albania’nın yazarı, laboratuvar hakkında herhangi bir bilgi vermesede çözmek için diğer lablara göre Ortalama/Ortalama üzeri bir bilgi gereksinime ihtiyaç olunduğunu düşünüyorum.

Zaman kaybetmeden labımıza giriş yapalım..

Ufak bir netdiscover tarama işleminin ardından sunucumuzun adresimizi öğrenip, port tarama işlemine geçiş yapıyoruz.

Gördüğümüz üzere sunucumuzda bir apache serveri mevcut fakat 80 portu yerine 8008 portuna saklanmış bir vaziyette.

Web sitemize giriş yapmamızla beraber, karşımıza çıkan arnavutça mesajı hemen translate yardımıyla çevirmeye çalıştık. Lakin bize bir yardımı dokunmadı. Sayfanın kaynak kodlarındada elde tutulur bir bilgiye ulaşamadıktan sonra dirb yardımıyla file, folder tarama işlemine geçiş yaptık.

Robots.txt’nin varlığını öğrendikten sonra boş durur muyuz? Yapıştırdık adres çubuğuna.

Önümüze çıkan adreslerden bir ipucu edinebilmek için deneme yapmaya koyuluyoruz tabii.

Fakat bizi bu dinazor arkadaştan başkası karşılamıyor. Bir kaç tane daha adres denememizin ardından, bunun böyle olmayacağını anlamamız uzun sürmüyor.

İşin farkına vardıktan sonra bu işte bize yardım edebilecek “Wfuzz” u yanımıza çağırıyoruz. Wfuzz, karşımıza çıkan sistemlere bruteforce uygulamak için mödüller barındıran bir aracımız. Peki, neden Wfuzz derseniz gerek kullanım kolaylığı, gerek hızı onu diğer bruteforce araçlarından bir adım önde tutuyor. En azından benim için 🙂

Hızlı bir şekilde robots.txt’den aldığımız folder isimlerini bir txt dosyasına içine kaydedip Wfuzz için bir wordlist oluşturuyoruz ve ardından gerekli olan sinirli kelimeleri fısıldıyoruz.

“wfuzz -c -z file,/root/Masaüstü/wordlist –sc 200 http://192.168.1.20:8008/FUZZ”

Kullandığımız -c parametresi renkli çıktılar istediğimizi,

Kullandığımız -z parametresi payloadımızı çağırmak istediğimizi,

,’den sonra gelen kızım ise payloadımızın wordlistinin lokasyonunu belirtir.

Kullandığımız –sc ise, sadece bize dönüşü 200 olan Http isteklerini görmek istediğimizi belirtir. Nasıl bir web sayfasından hata alırken “Error:404” şeklinde bir cevapla karşılaşıyorsak, 200 de aynı şekilde sayfaya başarılı bir şekilde giriş yapıldığının göstergesidir.

Web sayfamızın sonuna girdiğimiz /FUZZ Parametresi ise, kullandığımız wordlistimizdeki kelimelerin /FUZZ’un yerine geçiceğini göstermemize yarar. Yani bunun bir folder tarama işlemini olduğunu bu sayede belirtiriz.

Karşımıza çıkan sonucumuz neredeyse wordlistimizdeki tüm folderların “200” ile bize geri dönüş sağladığını gösterdi. Yani demek oluyor ki, bulunan tüm folderların içerisinde aynı dinazor resmi var. Fakat bu noktada bizim asıl işimize yarayan kısım, folderların bilgilerine erişmiş olmamız. Her bir folder içerisindeki bulunan aynı resimden ötürü, folderlar birbirleri arasında aynı değerlere sahipken, aralarında farklı olan bir tanesini gözümüze iliştirip, girişimizi yapıyoruz.

/vulnhub/ isimli bir klasörümüzün olduğunu öğrenip bir adım daha ilerliyoruz.

Vulnhub’a giriş yapmamızla beraber, önüme çıkan login ekranına öncelikle default değerler girmeyi denemiştim. admin-admin , admin-password gibi. Fakat herhangi bir sonuca ulaşamayınca bypass etmek üzerine çalışmaya başladık.

Bunun için ben burpsuite’den yardım aldım. Fakat tabii komutları ellede giriş yapabilirsiniz. Lakin siz arkaplanda farklı metodlar üzerine çalışırken, burpsuitenin tüm işi halletmesi size kolaylık sağlıyor.

Sonucu bize sql hatasıyla dönen komutlardan bir tanesinin girişini elle yapıp çıkan sayfamızı incelemeye koyuluyoruz.

Açıkçası itiraf etmeliyim, bu noktadan sonra bir adım daha ilerleyemeyip biraz destek almayı düşündük. Boşa geçen bir saatin ardından ise karar verip, sorunumuzu nasıl çözeyeceğimiz hakkında araştırmaya koyulduk.

Ve öğrendik ki, edindiğimiz sql hatasıyla beraber bir bruteforce saldırısıyla login sayfamızı es geçebilirmişiz. Peki bu nasıl? Bruteforceda uygulanacak her bir kullanıcı adının sonuna ” ’# ” girdiğimiz zaman, sql hatasından kaynaklı password kısmı es geçilerek panele giriş sağlanabiliyormuş. Bunu bizde yeni öğrendik. 🙂 Bu bilgiyle beraber, bruteforce’umuzu uygulamaya koyuluyoruz.

Kullandığımız -d parametresi bunun bir data saldırısı olacağını,

Kullandığımız -w parametresi wordlist lokasyonunu,

–hs ise bir kaç adım önce kullandığımız –sc parametresinin tersi olarak “Invalid” sonucu ile karşılaşmadığımız girişleri görmek istediğimizi belirtmemize yarıyor.

Çıkan “Jeff” username’inin sonucunda sayfamıza giriş yapmak için yola koyuluyoruz. Girişimizi yaparken bruteforce saldırısında uyguladığımız gibi Jeff’# şeklinde sql hatası sağlayacak parametremizi eklemeyi unutmuyoruz.

Sayfamıza giriş yapmamızla beraber önümüze çıkan upload ekranınına uygun hemen bir shell hazırlıyoruz.

Fakat beklediğimiz üzere upload ekranımız sadece belirli uzantılı dosyalara karşı çalışıyormuş.

Bunu öğrenmemizle beraber hemen shellimizi .jpg uzantısına çevirip, tekrardan upload etmeyi deniyoruz.

Sitemize shellimizi upload etmemizin ardından ise, sitemiz bizi ana sayfaya yönlendirip, shell dosyamızı karşımıza çıkartıyor.

Tabii hiç durmadan arkaplanda bir multi/handler açıp, dosyamıza giriş yapıyoruz.

Shellimize giriş yapmamızın ardından, gözümüze çarpan ilk dosya olan config.php’ye bir umut giriş yapıyoruz.

Database username ve şifremizi öğrenmemizin ardından bir kaç sql denemesinden sonra başarısızlığa ulaşıyoruz. 🙂 Maalesef elimize yararlı bir bilgi geçmiyor ve sunucumuz içinde gezmeye başlıyoruz.

Gel zaman, git zaman /etc/ Klasörünün içerisinde savrulurken, gözümüzü o çarpıyor. “Passwd” dosyamızın yazma izni var. Fakat bununla ne yapabileceğimiz konusunda bir fikrimiz olmadığından internete başvuruyoruz tabii.

Ufak bir Linux tarihçesinden sonra “Passwd” dosyasının temeli hakkında bilgilerimizi ediniyoruz. “Passwd” dosyamız bildiğimiz üzere sunucumuzda bulunan userları ve userların yetkileri hakkında bilgiler edinmemizi sağlayan bir text dosyamız.

Tabii bu iş sadece “Read” yetkimiz varken bununla sınırlıydı. Bulunduğumuz bu konumda sadece okumak değil, yazmak üzerinede yetkimiz var. Peki, passwd dosyamıza girilen bu user bilgileri ve yetkiler nasıl gerçekleşiyor?

Gördüğümüz üzere her bir username’in sonunda bir “:x:” mevcut. Bin:x: , games:x: gibi..

Bu “x” karakterimiz eski zamanlarda kullanıcı şifresiymiş. Herkesin gözdesi halindeymiş. Kullanıcı adının hemen yanında yer alır, tüm dikkati ve ilgiyi üzerinde toplarmış. Üzerine giydiği “salt” ile ışık gibi parıldarmış tüm alemde. “salt” ise ünlü cüce encode’un hazırladığı sihirli bir tılsımmış. Bu tılsım ise şifremizi tüm kötülerden korurmuş. Fakat bu bazılarının hoşuna gitmemiş. Kıskanmışlar ve bu şifremizi tılsımıyla beraber /shadow dosyasının içine kapatmışlar. Artık kim şifreyi görmek isterse, /shadow mahzenine erişmek zorundaymış. Shadow dosyasının anahtarı ise kötülerin imparatoru Root’a aitmiş ve onun haricinde kimse o mahzene giriş yapamazmış.

Okuduğumuz bu bilgilere, x’in shadow klasörüne uzanan bir user şifresi olduğunu ve salt ile encodelandığını öğrendik. Peki biz bu x’i değiştirerek, yeni şifre edinemez miyiz? Edinebiliriz tabii.

Biz salt türünde bir oluşturmak için python crypt kütüphanesi kullandık. Giriş yaptığımız “alper” şifremizi, virgülden sonraki açıklama ise şifreleme türümüzü gösterir.

Salt şifremizi oluşturmamızla beraber passwd dosyamızı bilgisayarımıza indirip tekrardan sunucumuza upload ediyoruz. Root ve taviso userlarının şifrelerini değiştirmekle yetindik.

Fakat passwd dosyamızı upload etmemizle beraber, bir heves kullanıcı değiştirmeye çalıştığımızda bu işlem için terminali kullanmamız gerektiğini belirten bir uyarıyla karşılaştık.

Hemen zaman kaybetmeden sunucumuzun termineline giriş yapmaya çalıştık. Fakat pythonun sunucumuzda yüklü olmadığını öğrendik. İnanılır gibi değil.. Geçirdiğimiz ufak bir şaşkınlığın ardından kontrol amaçlı /bin dosyamıza erişim sağladık.

Yüklü olan python sürümünün aslında 3.5 olduğunu öğrenip, derin bir oh çekip işe koyulduk.

Ve terminalimize giriş yapıp, root olmamızla beraber flagımızı kontrol ediyoruz..