CTF Çözümü 09 Ekim 2025

TryHackMe RootMe CTF Çözümü

Yazar
Sadıkcan TULUK Teknoloji Uzmanı
TryHackMe RootMe CTF Çözümü

Bu çözüm makalesinde, TryHackMe platformundaki RootMe adlı CTF’i adım adım nasıl çözeceğinizi göstereceğiz. Amaç, hedef makinede bir zafiyet bularak kullanıcı yetkilerini ele geçirmek ve en sonunda root yetkisine yükselerek makineyi tamamen kontrol etmektir.

VPN Bağlantısı ve Makineyi Başlatma

Öncelikle, TryHackMe hesabınıza giriş yapın ve RootMe odasına gidin. VPN bağlantınızın aktif ve hedef makineye erişiminizin olduğundan emin olun.

  • “Join Room” butonuna tıklayarak odaya katılın.
  • “Start Machine” butonuna basarak sanal makineyi başlatın.
Press enter or click to view image in full size

Makine başlatıldığında, size bir IP adresi verilecektir (ekran görüntüsünde 10.10.196.118 olarak görülüyor). Tüm işlemlerimizi bu IP adresi üzerinden gerçekleştireceğiz.

Press enter or click to view image in full size

Servis Keşfi (Nmap Taraması)

Hedef makinenin üzerinde hangi servislerin çalıştığını öğrenmek, bir sızma testi için en önemli ilk adımdır. Bunun için Nmap aracını kullanacağız.

Terminalinizde aşağıdaki komutu çalıştırın:

sudo nmap -sV -sC -p- 10.10.196.118

Press enter or click to view image in full size
  • -sV: Servis versiyonlarını tespit eder.
  • -sC: Varsayılan Nmap betiklerini çalıştırır.
  • -Pn: hedefe ping atlamasını devre dışı bırakır ve host’u çevrimdışı görünse bile port taramasını doğrudan başlatır.

Tarama sonucunda, hedef makinede iki açık port olduğunu göreceksiniz:

  • Port 22: SSH (OpenSSH 8.2p1 Ubuntu)
  • Port 80: HTTP (Apache httpd 2.4.41 Ubuntu)

Bu sonuçlar, ana saldırı vektörümüzün HTTP servisi olacağını gösteriyor. İlk hedefimiz, web sunucusunda bir zafiyet bulmak olacaktır.

Web Servisini İnceleme ve Gizli Dizinleri Bulma

Tarayıcınızla 80 numaralı porttaki web sitesine gidin (http://10.10.196.118/). Karşınıza root@rootme: ~# ve "Can you root me?" yazan bir sayfa çıkacaktır. Sayfanın kaynak kodunu incelediğinizde, herhangi bir ek bilgi veya ipucu olmadığını göreceksiniz. Bu durumda, sitedeki gizli dizinleri bulmak için bir araç kullanmamız gerekir.

Press enter or click to view image in full size
Press enter or click to view image in full size

Bu amaçla Gobuster veya Dirb gibi bir dizin tarayıcısı kullanabiliriz. Benzer bir kelime listesi kullanarak gizli dizinleri tarayacağız:

gobuster dir -u http://10.10.196.118 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

  • gobuster dir: Dizin tarama modunu başlatır.
  • -u: Hedef URL’yi belirtir.
  • -w: Kullanılacak kelime listesini belirtir.
Press enter or click to view image in full size

Tarama sonucunda /uploads/css/js ve /panel gibi dizinler bulunacaktır. Bu dizinler arasında en ilgi çekici olanı /uploads ve /panel dizinleridir.

  • /uploads dizini, sunucuya dosya yüklemek için bir yer olabileceğini gösteriyor.
  • /panel dizini, muhtemelen bir yönetim paneli veya dosya yükleme arayüzü içeriyor.

Tarayıcınızdan http://10.10.196.118/uploads/ adresine gittiğinizde, bu dizinin bir dosya yükleme arayüzü olduğunu göreceksiniz. Bu, makineye bir ters kabuk (reverse shell) dosyası yükleyerek ilk erişimi sağlamak için bir yol olabilir.

Press enter or click to view image in full size
Press enter or click to view image in full size

Ters Kabuk (Reverse Shell) Dosyası Hazırlama

Web sitesinde bir dosya yükleme paneli olduğunu gördük. Bu paneli kullanarak sunucuya bir ters kabuk dosyası yükleyeceğiz. Kali Linux’ta yer alan hazır ters kabuk dosyalarından birini kullanabiliriz.

  • Ters kabuk dosyasını bulun: Terminalde locate webshells komutunu çalıştırarak Kali'deki hazır kabuk dosyalarını listeleyebilirsiniz. Bu dosyalar /usr/share/webshells dizininde bulunur.
Press enter or click to view image in full size
  • PHP kabuk dosyasına gidin: cd /usr/share/webshells/php/ komutuyla PHP kabuklarının bulunduğu dizine gidin.
  • Dosyayı masaüstüne kopyalayın: cp php-reverse-shell.php /home/kali/Desktop/shell.php komutuyla php-reverse-shell.php dosyasını masaüstünüze shell.php adıyla kopyalayın. Bu, dosya üzerinde kolayca düzenleme yapmanızı sağlar.
Press enter or click to view image in full size
  • IP ve Port bilgilerini düzenleyin: Kopyaladığınız shell.php dosyasını bir metin düzenleyiciyle açın (nano shell.php). Dosyanın içindeki IP adresi ve port değişkenlerini kendi VPN IP adresinizle ve dinleme yapacağınız portla (örneğin, 4444) değiştirin. VPN IP adresinizi ifconfig komutuyla bulabilirsiniz.
Press enter or click to view image in full size

Dosya Yükleme ve Zafiyetten Kaçınma

Hazırladığınız shell.php dosyasını web sitesindeki dosya yükleme paneline yüklemeye çalıştığınızda, büyük ihtimalle "PHP não é permitido!" (PHP'ye izin verilmiyor!) şeklinde bir hata mesajı alacaksınız. Bu, web sunucusunun .php uzantılı dosyaların yüklenmesini engellediği anlamına gelir.

Press enter or click to view image in full size

Bu güvenlik önlemini aşmak için, dosya uzantısını sunucunun izin verdiği başka bir PHP uzantısıyla değiştirmemiz gerekir. TryHackMe’deki “File Upload General Methodology” makalesine bakarak hangi uzantıların geçerli olduğunu kontrol edebilirsiniz. Genellikle .phtml.php3.php4 veya .php5 gibi uzantılar işe yarar.

Press enter or click to view image in full size
  • mv shell.php shell.php3 komutunu kullanarak dosyanın uzantısını .php3 olarak değiştirin.
  • Şimdi shell.php3 dosyasını tekrar yüklemeyi deneyin. Bu sefer yüklemenin başarılı olduğunu göreceksiniz.
Press enter or click to view image in full size
Press enter or click to view image in full size

Ters Kabuğu Çalıştırma ve İlk Erişimi Elde Etme

Dosyayı yükledikten sonra, kabuğu yakalamak için kendi Kali makinenizde bir dinleyici (listener) başlatmalısınız.

  • Dinleyiciyi başlatın: nc -nvlp 4444 komutunu kullanarak Netcat dinleyicisini başlatın. Bu komut, 4444 portundan gelen bağlantıları dinleyecektir.
  • Kabuğu tetikleyin: Yüklediğiniz shell.php3 dosyasını çalıştırmanız gerekir. Bu dosya, http://10.10.196.118/uploads/ dizininde bulunur. Tarayıcınızla http://10.10.196.118/uploads/shell.php3 adresine gidin.

Bu adres, Netcat dinleyicinize bir bağlantı gönderecek ve bir kabuk elde edeceksiniz.

NOT

Yüklediğiniz .php3 dosyasının bir ters kabuk bağlantısı kurmadığını fark edebilirsiniz. Bu, web sunucusunun .php3 uzantısına izin vermesine rağmen, bu dosya türünün sunucuda bir web kabuğu olarak çalıştırılmadığı anlamına gelebilir. Web sunucuları, güvenlik önlemi olarak PHP yorumlayıcısını belirli dosya uzantılarıyla ilişkilendirir. Eğer .php3 uzantısı bu ilişkilendirmenin dışında kalıyorsa, dosyanız düz metin olarak işlenir ve kabuk çalışmaz.

Bu engeli aşmak için, farklı dosya uzantılarıyla denemeler yapmanız gerekir. Hedefiniz, PHP yorumlayıcısının çalıştırdığı bir uzantı bulmaktır.

  • Çeşitli PHP Uzantılarını Deneyin: Kali’deki PHP kabuk dosyasını (php-reverse-shell.php) kullanarak yeni kopyalar oluşturun. Her kopyaya farklı bir PHP uzantısı verin; örneğin:
  • shell.phtml
  • shell.php5
  • shell.php4
  • shell.pht
  • Adım Adım İlerleme: Her bir yeni dosyayı teker teker yükleyin. Her yüklemeden sonra, kendi makinenizde yeni bir Netcat dinleyicisi başlatın ve ardından tarayıcınızdan yüklediğiniz dosyayı çalıştırın. Örneğin, shell.php5 dosyasını yüklediyseniz, http://10.10.196.118/uploads/shell.php5 adresine gidin. Bu süreç, doğru uzantıyı bulana kadar tekrarlanmalıdır.

Bu yöntem, sunucunun dosya uzantılarını nasıl işlediğini anlamanıza ve doğru istismar yolunu bulmanıza yardımcı olacaktır. Doğru uzantıyı bulduğunuzda, kabuk bağlantınız Netcat ekranınızda belirecektir.

Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size

Kullanıcı Bayrağını Bulma

Kabuk elde ettikten sonra ilk yapmanız gerekenlerden biri, mevcut kullanıcının kim olduğunu öğrenmek ve dosya sistemini keşfetmektir.

  • whoami komutunu kullanarak o an hangi kullanıcıyla işlem yaptığınızı görebilirsiniz. Çıktıda www-data olarak görüneceksiniz. Bu, bir web sunucusu kullanıcısıdır ve genellikle kısıtlı yetkilere sahiptir.
  • ls -la komutuyla mevcut dizini listelediğinizde, user.txt adında bir dosya göreceksiniz. Bu dosya, makinenin ilk bayrağını içerir.
  • cat user.txt komutunu kullanarak dosyanın içeriğini okuyun ve bayrağı alın.

Tebrikler, ilk bayrağı buldunuz! Şimdi yetki yükseltme aşamasına geçerek asıl hedef olan root yetkisine ulaşmalıyız.

Yetki Yükseltme için İpuçları Bulma

Yetki yükseltme için zafiyetler ararken, en yaygın olarak kontrol edilen yerlerden biri SUID binary’leridir. SUID (Set User ID) bitine sahip dosyalar, kendilerini çalıştıran kullanıcının yetkileriyle değil, dosyanın sahibinin yetkileriyle çalışır.

  • find / -type f -perm -04000 -ls 2>/dev/null komutunu kullanarak sistemdeki tüm SUID binary'lerini listeleyebilirsiniz.
  • Çıktıları incelediğinizde, normal SUID dosyalarının yanı sıra /usr/bin/python2.7 dosyasının da SUID bitine sahip olduğunu fark edeceksiniz.

Bu, önemli bir ipucudur. python normalde bir komut yorumlayıcısıdır ve bu dosyanın root yetkileriyle çalıştırılması, www-data kullanıcısının root kabuğu almasına olanak tanıyabilir.

root.txt Dosyasını Okuma ve Yetki Yükseltme (Root Erişimi)

SUID’li python binary'sini kullanarak bir root kabuğu elde edeceğiz. python ile sistem komutlarını çalıştırabiliriz ve SUID sayesinde bu komutlar root yetkileriyle çalışır.

Bu tür komutları araştırabileceğiniz bir web sitesi var:

https://gtfobins.github.io/

Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size

root.txt Dosyasını Okuma

Terminalde aşağıdaki komutu girin:

/usr/bin/python2.7 -c ‘print(open(“/root/root.txt”).read())’

Yetki Yükseltme (Root Erişimi)

Press enter or click to view image in full size
Press enter or click to view image in full size

CTF Tamamlanması

Son olarak CTF sayfasında bizden istenen veriler girilerek CTF tamamlanır.

Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size