Bir Dosya Yükleme Paneli: Kapı mı, Yoksa Açık Bir Pencere mi?
Dijital dünyada kullanıcıya "buraya bir dosya bırakabilirsin" dediğiniz an, aslında evin anahtarını paspasın altına koymuş sayılırsınız. Bugün hangi modern siteye baksak; özgeçmişler, faturalar veya profil fotoğrafları havada uçuşuyor. Ancak bu konforun arkasında, sistemi saniyeler içinde çökertebilecek bir File Upload (Dosya Yükleme) fırtınası kopabilir. Gelin, bu "masum" yükleme butonlarının nasıl birer silaha dönüştüğünü ve bu silahı nasıl etkisiz hale getireceğimizi teknik ama sıkıcı olmayan bir dille inceleyelim.
Zafiyetin Anatomisi: Neden Başımız Ağrıyor?
Sorun aslında çok insani: Güven. Sunucu, gelen dosyayı bir misafir gibi karşılayıp sadece "etiketine" (uzantısına) bakarak içeri aldığında kıyamet kopuyor. Saldırgan, bir resim dosyasının içine zehirli kodlarını enjekte edip adını foto.jpg.php koyduğunda, sistem bunu sadece bir görsel sanıp içeri buyur ediyor.
Eğer sunucu bu dosyayı yanlışlıkla "çalıştırılabilir" bir kod olarak görürse; RCE (Uzaktan Kod Çalıştırma) dediğimiz o korkunç senaryo gerçekleşir. Artık saldırgan sunucuda sizin adınıza komut verebilir, veritabanını boşaltabilir veya tüm sistemi kilitleyebilir.
Dosyaların Parmak İzi: Magic Bytes
Dosyaları sadece .pdf veya .jpg takılarıyla tanımak, bir insanı sadece kıyafetinden tanımaya benzer. Oysa her dosyanın en başında, gerçek kimliğini fısıldayan Magic Bytes (Sihirli Baytlar) vardır.

Güvenli bir sistem, dosyanın adına bakmadan önce bu "parmak izine" bakar. Eğer dosya .jpg diyor ama baytları 4D 5A (yani bir .exe) diye bağırıyorsa, o dosya anında kapı dışarı edilir.
Savunma Hattı: Beyaz Liste mi, Kara Liste mi?
Yazılımcıların yaptığı en büyük hata "yasaklılar listesi" (Blacklist) oluşturmaktır. .php yasaklarsınız, saldırgan .phtml ile gelir; onu yasaklarsınız .php5 ile gelir. Bu kedi-fare oyununu bitirmenin tek yolu Beyaz Liste (Whitelist) kullanmaktır.
"Sadece benim belirlediğim (JPG, PNG, PDF) dosyalara izin ver, geri kalan her şeyi yak gitsin."
Bir de biz deneyelim, bakalım gerçekten oluyor mu?
Cyberexam.io üzerindeki bir dosya yükleme alanını hedef alarak, sunucu taraflı filtreleme mekanizmalarını manuel yöntemlerle sömüreceğiz. Uzantı manipülasyonu ve dosya imzası (Magic Byte) enjeksiyonu gibi tekniklerle, sistemin "güvenli dosya" algısını bozup zararlı bir betiği sunucuya yüklemeyi amaçlıyoruz. Hedefimiz, savunma duvarlarını aşarak sistem üzerinde doğrudan komut yürütmemizi sağlayacak bir erişim noktası oluşturmaktır.
Sızma girişiminin temelini oluşturmak adına, minimal düzeyde bir PHP kodu (Web Shell) yapılandıralım.

- Kodun İşlevi: Betiğimizde kullandığımız
system($_GET['cmd']);fonksiyonu sayesinde, URL üzerinden gönderdiğimiz komutları doğrudan sunucunun işletim sistemine iletmeyi amaçladık. - Dinamik Kontrol:
$_GET['cmd']yapısını kullanarak, sunucuyu uzaktan yönetebileceğimiz dinamik bir arayüz oluşturduk.
Sürece, lab dökümantasyonunda belirtilen 10.0.1.3 hedef IP adresine bağlanarak devam edelim.

Karşımıza çıkan "File Upload Lab 2" arayüzü, kullanıcıdan dosya yüklemesini bekleyen tipik bir web fonksiyonudur.
Sistemin koruma düzeyini ölçmek amacıyla doğrudan bir .php dosyası yüklemeyi deneyelim.

Sunucu bu talebe "Php file is not allowed" (PHP dosyasına izin verilmiyor) uyarısıyla yanıt verdi. Bu geri bildirim bize sistemin spesifik bir uzantı engelleme mantığı (Blacklist) yürüttüğünü kanıtladı.
Sitenin sadece .php metnine odaklandığını fark ettikten sonra, bu kısıtlamayı atlatmak için dosya ismini manipüle etmeye karar verdik. Saldırı dosyamızın adını test.php.txt olarak revize ettik.

Mantık: Sitenin filtresini, dosya ismine eklediğimiz masum bir .txt uzantısıyla yanıltmayı hedefledik.
Yeniden adlandırılan dosyayı sisteme gönderdiğimizde, site bu kez herhangi bir hata vermedi ve "Upload done!" onayını ekrana yansıttı.
Sonuç: Sitenin "PHP yasaktır" kuralının, dosya ismine eklenen ek bir uzantıyla (double extension) kolayca baypas edilebildiğini kanıtlamış olduk.

Yükleme sonrası sistem tarafından sağlanan "here" linkine tıklayarak, dosyamızın /upload/images/ dizini altında başarıyla barındırıldığını doğruladık. Bu durum, bir saldırganın zararlı kodlarını sunucuya "meşru bir dosya" gibi sızdırabildiğinin en net kanıtıdır.
Zaman ayırıp okuduğunuz için teşekkür ederim.