ZAFİYETLİ MAKİNE ÇÖZÜMÜ | Mr-Robot:1
Merhabalar. Bu yazımda, VulnHub ve TryHackMe plartformunda bulunan “Mr-Robot: 1” isimli zafiyetli makinenin çözümünü sizlere göstermeye çalışacağım. Makine isminden de anlaşılacağı gibi “Mr. Robot” dizisi konu alınarak hazırlanmıştır. Şimdi çözümüne geçelim. Çözüm biraz uzun olduğu için bazı basit ve temel işlemleri görsel olarak göstermeyeceğim, daha çok çözüm odaklı görseller ile anlatmaya çalışacağım.
Öncelikle netdiscover aracı ile hedef makinemizin ip adresini tespit edip Nmap taramamızı başlatıyoruz:
Nmap raporumuza baktığımızda 80 HTTP portu ve 443 HTTPS portunun açık olduğunu ve bir web servisi çalıştığını görüyoruz. Başka da açık port olmadığı için web üzerinden gideceğimizi anlıyoruz. IP adresimizi alıp web sunucumuza gidip incelemeler yapıyoruz.
Web sunucumuza girdiğimizde bizi böyle bir animasyon karşılıyor. “Commands” yazan kısımdaki komutları web terminali ekranımıza yazıyoruz fakat herhangi bir sonuç elde edemiyoruz. Dizi ile alakalı bazı kesitler ve görsel animasyonlar çıkıyor. Gizli uzantı adreslerini öğrenmek için ve zafiyet tespiti yapmak için Dirb ve Nikto araçlarımızı aynı anda çalıştırıyoruz. Sitede de yine bazı gezinmeler yapıyoruz fakat herhangi bir sonuç elde edemiyoruz ve çalıştırdığımız araçların raporlarını bekliyoruz. Dirb taramamızda çıkan gizli url dizinleri gidişat yolumuzu belirlemiş oluyor.
Dirb tarama raporumuza göre robots.txt ve “wp-admin, wp-login” sayfaları önem arz eden yerler olduğu için hemen kontrolünü sağlıyoruz. robots.txt sayfamıza gidince bize bazı bilgileri vermiş oluyor.
Edindiğimiz bu bilgileri görmek için url sayfamıza yazıyoruz. “fsocity.dic” sorgusunu yaptığımızda bize içerisinde çokça kelimenin olduğu bir wordlist dosyası olduğunu gösteriyor.
Diğer bir bilgimiz olan “key-1-of-3.txt” bulduğumuz ilk flag olduğunu anlıyoruz ve kontrol etmek için url sorgumuza yazıyoruz. Bu şekilde robots.txt gizli url’sini tespit ederek ilk flagımızı bulmuş oluyoruz.
Şimdi ise dirb aracımızdan edindiğimiz diğer önemli url’ye geliyoruz yani wp-login’e. Bu url dizinimize gittiğimizde ise wordpress login kısmının karşıladığını görüyoruz.
Bazı denemeler yaptığımız zaman yanlış giriş yaptığımızı ve buraya bir şekilde giriş yapabilirsek wordpress’in admin paneline erişebileceğimizi düşünüyoruz. Elimizde robots.txt dizinimizden elde ettiğimiz bir wordlist mevcuttu. Bu wordlisti kullanarak wordpress login kısmına bir brute force saldırısı yapabiliriz. Öncelikle wget komutu ile ile “fsocity.dic” dosyamı makineme indiriyorum.
İçerisinde çok fazla kelime var fakat şimdilik bir değişim yapmıyoruz. Sitemize kullanıcı adını ve şifreyi hatalı girince ilk olarak verdiği hata “Invalid username”. Yani ilk olarak kullanıcı adını kontrol ediyor bu doğru ise ikinci aşama olarak şifreyi kontrol ediyor demektir. Bu saldırı sürecimizi kolaylaştırmış oluyor. Elimizde herhangi bir kullanıcı adı ve şifre de olmadığı için her ikisi içinde ayrı ayrı bir brute force saldısı yapmamız lazım.
Kullanıcı adına yönelik brute force saldırısı için hydra aracımızı kullanıyorum. Hydra aracımızı, saldırı yaptığımız protokole göre bazı komutları yazmamız lazım. Bu saldırı türümüz http bir site de login saldırısı. Burpsuit aracım ile http-post-form içeriğini çekip hydra aracımıza ekliyoruz. Çalışma mantığı şu şekilde olacak; verdiğim wordlistteki kelimeleri (şifre önemsiz zaten ilk olarak kullanıcı adına bakıyor demiştik) tek tek dene ve “Invalid username.” hatası almadığın kullanıcı ismini bana bildir diyoruz. Bu hatayı almıyor isek zaten o kullanıcı adımız doğru olmuş oluyor. Şimdi kullanıcı ismini bulmak adına brute force saldırımızı başlatıyoruz.
Hydra aracımız, bulmuş olduğumuz wordlistteki kelimeleri bizim için tek tek deniyor. Şifre olarak test yazdık çünkü dediğim gibi bu saldırıda şifrenin önemi yok amacımız kullanıcı adını bulmak. Biraz bekledikten sonra kullanıcı adımızı öğrenmiş oluyoruz.
“Elliot” brute force saldırısı sonucunda elde etmiş olduğumuz kullanıcı adımız. Farklı kullanıcı adları da olabilir ama şimdilik saldırıyı durduruyoruz. Hemen wp-login panelimize girip kullanıcı adımızı kontrol ediyoruz.
“Elliot” şeklinde giriş yapmaya çalıştığımız zaman “ Elliot kullanıcı adı için girdiğiniz şifre yanlış” hatası alıyoruz. Yani kullanıcı adımızı öğrendik, şimdi ise bu kullanıcı adına ait şifreyi öğrenmemiz lazım. Yine hydra aracımızı kullanabilirdik fakat bende çalıştırınca hata verdi, çok fazlada vakit harcamamak için “wpscan” aracı ile brute force saldırısı yapmayı tercih ettim. (Wpscan aracı hakkında daha detaylı bilgi almak istiyorsanız, sitemizde Furkan Şeker tarafından yazılmış olan "WPScan Kullanımı ve WordPress Taraması" yazımızı inceleyebilirsiniz.) Wpscan aracı ile şifre kırma saldırımızı başlatıyoruz. Kullanıcı adımızı “Elliot” şifremizi de wordlistteki kelimelerden alacağını aracımıza belirtiyoruz. Saldırımızı başlatmadan önce aşağıda gösterdiğim filtreleme komutunu yapıyoruz. Wordlistimizi incelediğimizde birbirine benzer kelimeler olduğunu farkediyoruz, bunları temizleyip dosyayı daha küçük boyutlu hale getiriyoruz.
Dosya boyutumuz büyük ölçüde küçülmüş olacak. Bunu yapmadan da saldırıyı yapabilirdik ama zaman açısından çok vaktimizi alırdı. Wpscan aracımızla saldırımızı başlatıp şifreyi bulmaya çalışıyoruz.
Wpscan aracımızla yapmış olduğumuz brute force saldırı sonucunda, “Elliot” isimli kullanıcı adının parolasını “ER28-0652” olarak bulmuş oluyoruz. Kullanıcı adını ve şifremizi kullanarak artık wp-login panelimizden giriş işlemini yapabiliriz.
Giriş yaptığımız zaman bizi böyle bir panel karşılıyor. Sade bir wordpress paneli, içerisinde bazı gezinmeler yapıyoruz ve shell alabileceğimiz kod çalıştırabileceğimiz bir alan bulmaya çalışıyoruz. Biraz paneli inceledikten sonra soldaki menülerden “Appearance” yani görünüm kısmından “Editor” seçeneğine gelince, sayfaların kaynak kodlarına erişebildiğimizi görüyoruz.
Alt kısımda “save” etme özelliği de olduğundan bu sayfalardan birinin kodunu değiştirip, içerisine reverse shell enjekte edebilirsek makinemizde bir session açabiliriz. Bu yöntemimizi denemek için internetten php reverse shell diye bir aratma yapıyoruz.
Pentestmonkey tarafından paylaşılan “php-reverse-shell.php” kodumuzu alıp, kaynak kodlarını değiştireceğimiz sayfamıza enejekte işlemini yapıyoruz. Bu shell kodumuzun IP adresini ve portunu kendimize göre ayarlayıp save ediyoruz.
Reverse shell kodumuzu kendimize göre ayarlarken (IP adresi ve port numarası) verdiğimiz 1234 portunu Netcat aracı ile dinlemeye alıyoruz.
Daha sonrasında ise sitenin kaynak kodlarına enjekte ettiğimiz php-reverse-shell kodumuzu çalıştırmak için, değiştirdiğimiz sayfanın ismini url kısmına yazıyoruz. Reverse shellimizi enjekte ettiğimiz sayfamıza gitmeye çalışınca Netcat aracımıza session gelmiş olur, hemen ID kontrolümüzü yapıyoruz. Daemon kullanıcısı olarak sistemimize giriş yapabildik.
Hemen bazı temel işlemleri yapıp /home dizini altında başka kullanıcı var mı kontrol ediyoruz. Baktığımız zaman robot adında bir kullanıcı olduğu görüyoruz. Robot kullanıcımızın dizinine gittiğimiz zaman ise bazı önemli bilgilere ulaşıyoruz.
“robot” kullanıcımızın dizinine gittiğimiz zaman ikinci flagımız olan “key-2-of-3.txt” dosyamızın bulunduğunu, fakat okuma yetkimizin olmadığını görüyoruz. Birde “password.raw-md5” diye bir dosya olduğunu görüyoruz. Dosyamızı okuduğumuz zaman robot kullanıcısına ait bir şifre gibi duran metin görüyoruz. “su robot” diyerek bu şifre ile giriş yapmayı deniyoruz. Fakat şifremizin yanlış olduğu geri bildirimini alıyoruz. Dosya isminde “md5” hash algoritmasının ismi geçtiği için bunun bir hashlenmiş şifre olduğunu düşünüyoruz. İnternetten online hash decoder tarzında bir aratma yapıp hashimizi kırmaya çalışacağız. Girmiş olduğumuz bir sitede hashimizi kırıyoruz ve şifremizi elde etmiş oluyoruz.
Alfabetik harf sıralaması olan şifremizi tekrardan “su robot” diyerek bizden istediği şifre yerine yazıp “robot” olarak shell alıyoruz. Artık ikinci flagımızı okuyabilir hale geliyoruz.
Bu kısımdan sonra son flagımızın “root” dizininde de olduğunu düşünerek yetki yükseltmesi işlemlerine devam ediyoruz. “Sudo –l” ile sudo yetkilerimizi kontrol ediyoruz fakat herhangi bir sudo yetkimizin olmadığı geri bildirimini alıyoruz. Bazı manuel arama işlemleri yaptıktan sonra sürecin daha da hızlanması için “linpeas” aracımıza başvuruyoruz. Kendi makinemin apache sunucusuna linpeas aracımı koymuştum. “service apache2 start” diyerek apache sunucumu açıyorum ve hedef sistemim üzerinden wget komutu ile aracımı indiriyorum. Hedef sistemde çalıştırma yetkilerini verebilmek için geçici bir dosya olduğu için işlemlerimi /tmp dizininde yapıyorum.
Aracımızı chmod ile çalıştırılabilir hale getiriyoruz ve aracımızı çalıştıyoruz. Linpeas aracımız bizim için bulunduğumuz sistemde hangi açıklar var, nerelerde ki açıkları kullanarak yetki yükseltmesi yapabiliriz listelemiş olacak.
Linpeas aracımız, kırmızı sarı kabartma ile belirttiği “/usr/local/bin/nmap” aracımızda kritik bir açıklık olduğunu ve bunu kullanarak yetki yükseltmesi yapabileceğimizin uyarısını verdi. Nmap ile nasıl bir yükseltme yapabiliriz diye internet üzerinden nmap shell tarzında bir aratma yapıyoruz.
Girmiş olduğumuz bir sitede “nmap --interactive” işlemini yaptıktan sonra “!sh” yazarsak eğer shell alabileceğimizi söylüyor.
Bu işlemi hedef makinemizde deniyoruz ve root olarak shell alıyoruz. /usr/local/bin/nmap açıklığından faydalanarak yapmış olduğumuz yetki yükseltme işlemimiz başarılı oldu. Artık root’uz ve son flagımız olan “key-3-of-3.txt” dosyamızı da okuyup makinemizi tamamlamış oluyoruz.
Bu yazımda VulnHub plartformunda bulunan "Mr-Robot: 1" isimli zafiyetli makinenin çözümünü göstermeye çalıştım. Umarım faydalı olabilmişimdir. Yazı ile alakalı aklınıza takılan veya merak ettiğiniz soruları profilimde ki sosyal medya hesaplarımdan bana ulaşarak iletebilirsiniz. Bir sonraki yazımda görüşmek üzere :)