Basic Pentesting
TryHackMe'deki Basic Pentesting CTF'inin çözüm sürecimi.
İlk olarak Target Machine'nin açık servislerine bakmak için nmap ile bir tarama gerçekleştiriyorum bunun sonucunda açık port'ları ve servisleri öğrenmiş oluyoruz.
Sisteme sızmak ya da bir noktadan bilgi toplamak için bu açık portları kullanıcaz.
Port Scanning:

Port Scanning Result:

80 Portunun açık olduğunu gördükten sonra direkt olarak tarayıcıda göz atmaya geçiyorum.

Sayfanın kaynaığını görüntülediğimizde

Şeklinde bir HTML tagları arasında bir yorum satırına denk geliyorum bu yorum satırında dev dev notes'a göz atabilirsiniz tarzında birşey diyor ve bunun bir klasör yapısı olabileceğini düşünüyorum o yüzden gobuster tool'u ile birlikte bir 'dir' taraması yapıyorum.

What is the name of the hidden directory on the web server(enter name without /)? = /development
Taramanın ilk başında bir path açığı çıkıyor /development diye bir path. Tarayıcıda bu path'e gidiyorum.

Tarayıcıda /development path'ine gittiğimizde gerçekten bir klasör yapısı olduğunu görüyorum ve bunun üzerine txt dosyalarının içeriklerini incelemeye başlıyorum.
J.TXT DOSYASI

Burada sanırım bir pentester etc/shadow dosyası içerisindeki hash'leri kırmayı denerken hash'in birini kırıyor ve şifreyi değiştirilmesi için not bırakıyor.
DEV.TXT DOSYASI

Burada geliştirici birşeylerle uğraştığını ve hala daha herhangi bir web application yapmadığını ancak nasıl çalıştığını anlayabilmek için bir örnek denediğini ve Apache Struts 2.5.12 sürümünü kullandığını yazmış.
Bunun üzerine bu sürümde bir vulnerability var mı diye kontrol ediyorum.

Apache Struts 2.5.12 sürümünde bir açık olduğunu ve Remote Code Execution zafiyetinin kullanılabildiğini öğrendim. Bu açık XML verilerin işlemek için XStream kütüphanesini kullanıyordu.
Ancak XStream kütüphanesi Deserialization yaparken verileri kontrol etmiyor filtreleme veya kısıtama yapmıyordu bu sebepden olayı saldırganın gönderdiği veriyi çalıştırmasından doğan bir zafiyettir.

8080 portunda Apache Tomcat/9.0.7 çalıştığını gördüm. Struts 2.5.12 sürümü için Remote Code Execution zafiyeti olsa da, sistemde Struts REST Plugin'i olmadığı için exploit çalışmadı. Bu aşamada bu tarafdan vazgeçiyorum.
Web tarafında tıkandıktan sonra RPC komutları atarak içerideki işletim sistemine sorularak sorarak veri toplayan enum4linux tool'unu kullanmayı düşündüm. Buradan username elde edip brute force deniyebiliriz.

Bu taramanın sonucunda 3 tane local user buldum.

What is the username? = jan
Username'leri bulduktan sonra bu username'ler ile birlikte Hydra ve SSH protokolünü kullanarak brute force bir saldırı düzenliyoruz bunun için jan'ı rockyou.txt dosyasını kullanıyoruz ve en son ssh flag'ini vererek port 22 olduğunu belirtmiş oluyoruz.

What is the password? = armando
Hydra ile birlikte brute force saldırı sonucunda Jan'ın password'unu ele geçirmiş oluyoruz. SSH protokolünü kullanarak Target Machin'e başarılı şekilde bağlanıyoruz.


Bağlandıktan sonra shell erişimimiz oluyor.
Ancak bu user ile kalmak yerine Privelege Escalation veya Lateral movement yapmamız gerekiyor.
Target Machin'de tek tek komut çalıştırıp bilgi toplamak veya açık aramak yerine direkt olarak içeriden çalıştırabileceğimiz bir bash script dosyasını çalıştırıp bizim yerimize onlarca komutu çalıştırmasını sağlıyor.
Bu Bash Script'i yerimize Kernel Analizi yapar OS sürümünü kontrol eder ve açık var mı diye kontrol eder. Dosyaları okuyabiliyorsa dosyaları kontrol eder, sistemdeki yazılımlarda açık var mı yok mu bunu kontrol eder, Ağ seviyesinde çalışan servisleri tek tek listeler. Bir burada linepeas kullanıyoruz.
Bu bash script'ini kendi Makinemize indirip daha sonrasında /Download dosyasını açıyoruz ki bu dosyayı Target Machin'e dosyayı aktarabilelim.
python -m http.service 8000 /Download klasörünü açıyoruz ve target machine'de ise:

Bu dosyayı target machine'de /tmp altına çekiyoruz.
Çektiğimiz dosyasyı executable yapabilme için chmod +x diyoruz bu dosya için. Ve ardından bu script'i Target Machine'de çalıştırıyoruz.

Bu bash script'ini çalıştırdıktan sonra bize uzun bir sonuç veriyor, bu sonuçları kontrol ediyoruz.
Sonuçların arasında SSL/SSH dosyalarını ararken Kay kullanıcısının SSH Private Key'in saklandığı dosya konumu tespit ediyor.

Bu dosyanın konumuna gidip dosyanın içeriğini cat ile okuyoruz.

Buradaki SSH Private Key'i bu target machine'e girerken kullanabiliriz ve Kay kullanıcısının yetkisi Jan'dan daha fazla yetkisi olabilir bu yüzden bu key'i kendi makinemiz'de bir dosyay kaydediyoruz.

Bunu bir dosyaya kaydedip chmod 600 komutunu bu dosya ile çalıştırmamız gerekiyor çünkü dosya açıkta kalırsa SSH Key dosyası açıkta olduğun için bağlantıyı reddedebilir.
SSH ile bağlanmak istiyoruz ancak bu key'in bir passphare ile korunduğunu görüyoruz. Buradaki passphare'i kırmamız gerekiyor bunun için John The Ripper kullanıcaz.
İlk olarak bu ssh key'ini john'un anlayabileceği bir formata dönüştürmek için ssh2john tool'u ile birlikte bir txt dosyasına kaydediyoruz.

Daha sonra yine john'u kullanarak bu txt dosyasının içerisindeki key'i rockyou.txt kullanarak kırmaya çalışıyoruz.

Sonuç olarak bu Private Key'i kullanarak SSH bağlantısı kurabilir hale geliyoruz passpahre = beeswax olduğunu bulduktan sonra.

TryHackMe'de istenen final password'u pass.bak içerisinden okuyarak son answer'ı yanıtlamış oluyoruz.

What is the final password you obtain? = heresareallystrongpasswordthatfollowsthepasswordpolicy$$

Efe Özel