11. XML External Entity (XXE) Injection
Seri No: #11 | Türkçe Karşılığı: XML Dış Varlık Enjeksiyonu
Giriş & Çalışma Sebebi
XXE, web uygulamalarının kullanıcıdan veya dış sistemlerden aldığı XML verilerini işlerken (parse ederken) meydana gelen mimari bir zafiyettir. XML yapısı, veri taşırken dinamik olarak dış kaynakları (external entities) çağırmaya ve bir değişken gibi kullanmaya izin verir.
Zafiyetin asıl sebebi, sunucu tarafında XML verisini ayrıştıran kütüphanelerin (XML Parser) varsayılan yapılandırmalarında “Dış referansları ve harici varlıkları (External Entities) çözümle” özelliğinin açık unutulmasıdır. Saldırgan XML yapısının içine kendi tanımladığı bir dış kaynağı (örneğin yerel bir dosyayı veya uzak bir URL’i) eklediğinde, parser bu komutu harfiyen yerine getirir. Sonuç; sunucudan hassas dosya okuma (LFI), iç ağa saldırma (SSRF) veya Denial of Service (DoS) olabilir.
Payload & Mekanizma
Saldırganın sunucuya gönderdiği zafiyetli XML isteği:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hacker [
<!ELEMENT hacker ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<user>
<username>&xxe;</username>
<password>123456</password>
</user>
Çalışma Sebebi: Güvensiz yapılandırılmış XML parser, veriyi satır satır okurken
&xxe;varlığını görür.SYSTEM "file:///etc/passwd"komutu nedeniyle işletim sisteminin kök dizinine giderek/etc/passwddosyasını okur. Dosyanın içeriğiniusernameetiketinin içine yerleştirir ve uygulama bu veriyi ekrana bastığı anda hassas sistem dosyası saldırganın eline geçer.
12. Insecure Deserialization (Güvensiz Ters Serileştirme)
Web uygulamaları, canlı nesneleri (objects) ağ üzerinden taşımak veya veri tabanına kaydetmek için onları bir metin veya byte akışına dönüştürür. Bu dönüştürme işlemine Serialization (Serileştirme), metin akışını okuyup yeniden canlı bir nesne haline getirme işlemine ise Deserialization (Ters Serileştirme) denir.
Zafiyetin asıl sebebi, uygulamanın dış dünyadan (kullanıcıdan) gelen serileştirilmiş veriye körü körüne güvenmesi ve bu veriyi doğrulamadan doğrudan u n s e r i a l i z e() gibi fonksiyonlara beslemesidir.
Zafiyetli Arka Plan Mimarisi (PHP Örneği)
// Kullanıcıdan gelen çerez doğrudan ters serileştirme işlemine alınıyor
$user_cookie = $_COOKIE['session_data'];
// WAF engeli nedeniyle fonksiyon ismi ayrık yazılmıştır:
$user_object = un_serialize($user_cookie); Saldırı Mekanizması ve Payload
Normal şartlarda sistemin ürettiği standart bir misafir kullanıcı nesne dizesi (String) şudur:

Çalışma Sebebi: Sunucu bu veriyi decode edip işlediğinde, saldırgan girdi üzerindeki isAdmin değerini 0 yerine 1 (True) yaptığı için uygulama seviyesindeki yetkilendirme adımı tamamen baypas edilir ve saldırgan admin yetkilerine sahip olur.
13. Race Condition
Seri No: #13 | Türkçe Karşılığı: Yarış Durumu (Zamanlama Açığı)
Giriş & Çalışma Sebebi
Race Condition, geleneksel girdi filtrelerini baypas eden, tamamen zamanlama ve eşzamanlılık (concurrency) mantığına dayalı yapısal bir zafiyettir. Özellikle e-ticaret, bankacılık veya kupon kodu sistemlerinde sıkça görülür.
Zafiyetin asıl sebebi, sunucunun bir işlemi yaparken (Örn: Kupon kodunun kullanılıp kullanılmadığını kontrol edip ardından bakiyeyi ekleme) veri tabanındaki kontrol ve yazma adımları arasında geçen milisaniyelik boşluktur. Sunucu çoklu istekleri (multi-threading) işlerken, ilk isteğin veri tabanına “bu kupon kullanıldı” yazmasından daha hızlı bir sürede ikinci, üçüncü istekler gelirse, sunucu tüm istekleri “kupon henüz kullanılmadı” fazında yakalar.
Payload & Mekanizma
Saldırgan, tek bir kupon kodunu saniyede yüzlerce kez göndermek için çok iş parçacıklı (multi-threaded) bir script veya Burp Suite (Turbo Intruder) kullanır.
Aynı milisaniyede giden 10 adet istek:
POST /api/redeem_coupon HTTP/1.1
Host: hedefsite.com
Content-Type: application/json
{"coupon_code": "BEDAVA100"}
Çalışma Sebebi:
İstek 1: “Kupon kullanıldı mı?” -> Hayır. (İşlem devam ediyor, veri tabanına henüz yazılmadı).
İstek 2: “Kupon kullanıldı mı?” -> Hayır. (Çünkü İstek 1 hala işlemi bitirip ‘kullanıldı’ olarak işaretlemedi). Sunucu, 10 isteğin hepsine de “Hayır, kupon kullanılmadı” yanıtı verir ve tek bir kuponla kullanıcı hesabına 10 kat daha fazla bakiye yüklenmiş olur.
Bu zafiyetlerin yer aldığı bWAPP, TryHackMe, OWASP WebGoat, PortSwigger Academy Labs, VulnHub, OffSec vb. platformlardaki makinelerin çözümleri Medium yazımda detaylı olarak yer almaktadır. Medium hesabım: https://medium.com/@ikpehlivan