CTF

TryHackMe Kenobi

Merhaba. Bu yazımda Tryhackme Kenobi odasının çözümünü yapacağım. Tryhackme Kenobi, bir Samba paylaşımına erişmeyi, proftpd’nin savunmasız bir sürümünü kullanarak ilk erişimi elde etmeyi ve bir SUID ikili dosyası aracılığıyla ayrıcalıklarımızı root’a yükseltmeyi kapsayacaktır.

İlgili odaya aşağıdaki linkten ulaşabilirsiniz.

https://tryhackme.com/room/kenobi

Task 1 – Deploy the vulnerable machine

1.1. – Scan the machine with nmap, how many ports are open?

İlk olarak kaç adet portun açık olduğu sorulmakta. Aşağıdaki nmap komutu ile bunun cevabını bulabiliriz.

nmap --open 10.10.86.121

Yukarıda görüldüğü üzere 7 adet açık port bulunmakta.

Task 2 – Enumerating Samba for shares

Samba Nedir?

Samba, Linux ve Unix için standart Windows ile birlikte çalışabilirlik program paketidir. Son kullanıcıların dosyalara, yazıcılara ve şirket intraneti veya internet üzerindeki diğer yaygın olarak paylaşılan kaynaklara erişmesine ve bunları kullanmasına olanak tanır. Genellikle bir ağ dosya sistemi olarak adlandırılır.

Samba, Sunucu Mesaj Bloğunun (SMB) ortak istemci / sunucu protokolüne dayanır. SMB yalnızca Windows için geliştirilmiştir, Samba olmadan diğer bilgisayar platformları, aynı ağın parçası olsalar bile Windows makinelerinden izole edilecektir. SMB’nin 445 ve 139 olmak üzere iki bağlantı noktası vardır.

Nmap ile Samba yolu ile yapılan paylaşımları tespit edebiliriz.

2.1. – Using the nmap command above, how many shares have been found?

Bu kısımda bize bir nmap komutu verilmekte ve bu komutun çıktısında kaç adet paylaşım bulunduğu sorulmaktadır. Bu sorunun cevabını vermek için aşağıdaki nmap komutunu kullanabiliriz.

nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.86.121

Buradaki nmap scripting engine komutu olansmb-enum-shares.nse bize paylaşıma açık dosyaları tespit edecek. Diğer komut olansmb-enum-users.nse ise hedef sistemde hangi hesapların bulunduğunu tespit edecek.

Yukarıdaki görselde görüldüğü üzere 3 adet paylaşım görülmekte. Bu paylaşımları incelemek için smbclient aracını kullanabiliriz. Burada anonymous paylaşımına göz atalım.

Yukarıda görüldüğü gibi anonim kullanıcı hesabı olduğu için parolasız bir şekilde giriş yaptık ve karşımıza log.txt isimli bir dosya çıktı. dosyayı okumaya çalıştığımda ACCESS_DENIED hatası sonucu yetkimiz yetmediği için okuyamıyorum. Bu dosyayı sbmget aracı ile indirip okuyabiliriz.

2.2. – What port is FTP running on?

Aşağıdaki komut ile log.txt dosyasını indirip okuyacağız.

smbget -R smb://10.10.86.121/anonymous

Resimde görüldüğü gibi log.txt dosyası içerisinde birçok önemli bilgi yer almakta. Soruyu 21 olarak cevaplayıp devam edelim.

2.3. – What mount can we see?

Önceki nmap bağlantı noktası taramamız, rpcbind hizmetini çalıştıran bağlantı noktası 111’i gösterecektir. Bu yalnızca uzaktan yordam çağrısı (RPC) program numarasını evrensel adreslere dönüştüren bir sunucudur. Bir RPC hizmeti başlatıldığında, rpcbind’e dinlediği adresi ve hizmet vermeye hazır olduğu RPC program numarasını söyler. 

Bizim durumumuzda, port 111 bir ağ dosya sistemine erişimdir. Bunu numaralandırmak için nmap kullanalım. Aşağıdaki nmap komutu ile bu soruyu cevaplayabiliriz.

nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.86.121

nfs-ls scripti, NFS dışa aktarmalarından dosyalar hakkında yararlı bilgiler edinmemizi sağlar. Bu komut ile ls komutu çıktısına benzer bir çıktı elde edilir. nfs-statfs scripti, uzak bir NFS paylaşımından disk alanı istatistiklerini ve bilgilerini alır. Bu komut df komutunun çıktısına benzer bir çıktı üretir.nfs-showmount scripti ise NFS dışa aktarımlarını gösterir. Burada kullanılan nmap scriptleri için https://nmap.org/nsedoc/scripts bu adresi ziyaret ederek detaylı bilgiye ulaşabilirsiniz.

Yukarıdaki görselde görüldüğü üzere /var yolu sorumuzun cevabı.

Task 3 – Gain initial access with ProFtpd

ProFtpd, Unix ve Windows sistemleriyle uyumlu, ücretsiz ve açık kaynaklı bir FTP sunucusudur. Ayrıca eski yazılım sürümlerinde de zafiyetler bulunmaktaydı.

3.1. – What is the version?

Bu soruyu çözmek için netcat ile bağlanmamız gerekmekte. Aşağıdaki komut kullanılarak sonuca ulaşabiliriz.

nc 10.10.86.121 21

Görüldüğü gibi ProFtpd versiyon numarası 1.3.5.

3.2. – How many exploits are there for the ProFTPd running?

ProFTPd üzerinde kaç adet zafiyet olduğunu tespit etmek için exploit-db komut satırı aracı olan searchsploit aracını kullanabiliriz. Aşağıdaki komut ile zafiyetleri görebiliriz.

searchsploit proftpd
searchsploit proftpd 1.3.5

Yukarıda görüldüğü gibi 1.3.5 sürümü için 3 adet zafiyet görülmektedir. mod_copy zafiyeti exploit edilebilir.

3.3. – We know that the FTP service is running as the Kenobi user (from the file on the share) and an ssh key is generated for that user. 

Mod_copy modülü , dosyaları/dizinleri sunucuda bir yerden diğerine kopyalamak için kullanılabilen SITE CPFR ve SITE CPTO komutlarını uygular. Kimliği doğrulanmamış herhangi bir istemci, dosyaları dosya sisteminin herhangi bir bölümünden seçilen bir hedefe kopyalamak için bu komutları kullanabilir. Kenobi için ssh anahtarı oluşturulduğunu biliyoruz. Şimdi Kenobi’nin özel anahtarını SITE CPFR ve SITE CPTO komutlarını kullanarak kopyalayacağız.

Nmap taramaları sonucu /var dizininin erişebildiğimiz bir dizin olduğunu bildiğimiz için zafiyeti kullanarak ssh anahtarını oraya kopyaladık.

3.4. – What is Kenobi’s user flag (/home/kenobi/user.txt)?

Deploy ettiğimiz makinede /var/tmp dizinine bağlanalım.

mkdir /mnt/kenobiNFS
mount machine_ip:/var /mnt/kenobiNFS
ls -la /mnt/kenobiNFS

Artık konuşlandırılmış makinemizde bir ağ bağlantımız var. /var/tmp adresine gidip özel anahtarı alabilir ve ardından Kenobi’nin hesabına giriş yapabiliriz.

Yukarıda görüldüğü gibi ilk olarak id_rsa anahtarını ilgili dizine kopyalıyoruz. Daha sonra dosya sahibine chmod 600 ile okuma ve yazma izni veriyoruz. Ardından elde ettiğimiz anahtarı kullanarak ssh ile kenobi kullanıcısına bağlanıyoruz. Sonra bulunduğumuz /home dizininden user.txt okuyorum.

Task 4 – Privilege Escalation with Path Variable Manipulation

SUID bitleri tehlikeli olabilir, passwd gibi bazı ikili dosyaların yükseltilmiş ayrıcalıklarla çalıştırılması gerekir (sistemde parolanızı sıfırlarken), ancak SUID bitine sahip diğer özel dosyalar her türlü soruna yol açabilir.

Bir sistemde bu tür dosyaları aramak için aşağıdaki komutu çalıştırabiliriz:

find / -perm -u=s -type f 2>/dev/null

4.1. – What file looks particularly out of the ordinary? 

Komutun çıktısı yukarıda görüldüğü gibidir. Sorumuzun cevabı ise /usr/bin/menu.

4.2. – Run the binary, how many options appear?

menu isimli bir binary dosyamız var bunu herhangi bir yol belirtmeden çalıştırıyorum ve cevap karşımızda 🙂

4.3. – What is the root flag (/root/root.txt)?

menu isimli dosyamız root yetkileriyle çalıştığı için bunu kötüye kullanarak buradan root yetkisine yükselebiliriz.

Curl olarak adlandırılan /bin/sh kabuğunu kopyaladık, ona gerekli izinleri verdik ve sonra yerini PATH‘imize ekledik. Bu, /usr/bin/menu çalıştırıldığında, “curl” ikilisini bulmak için bizim yol değişkenimizi kullandığı anlamına geliyordu. Aslında bu /usr/sh‘ın bir sürümüdür ve bu dosya root olarak çalıştırılır. menu dosyasını tekrar çalıştırdığımızda root yetkisine ulaştık. Bayragı okuyup odayı tamamladık.

Başka yazılarda görüşmek üzere.

Serdar Daşdemir

Cyber Security Specialist / Pentester

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu