Selamlar! Bugün PortSwigger Academy serüvenimin en öğretici ve "bulmaca" tadındaki lablarından birini birlikte çözeceğiz: "Exploiting XXE to perform SSRF attacks".
Bu labda sadece bir güvenlik açığını bulmakla kalmayacağız; XXE (XML External Entity) zafiyetini bir kaldıraç olarak kullanarak sunucuyu kendi iç dünyasına saldırtacağız (SSRF). Yani kapıyı dışarıdan zorlayıp, anahtarı içeriden alacağız. Hazırsanız Burp Suite'i açalım ve bu sızma operasyonuna başlayalım.
1. Keşif: Hedefi Tanımak
İlk iş olarak sitemizi ziyaret ediyoruz. Karşımızda klasik, temiz bir e-ticaret sitesi var. Ancak bizim işimiz vitrinle değil, tezgahın arkasıyla.

Sitede gezinirken dinamik bir veri akışı arıyorum. Herhangi bir ürünün detayına girdiğimde "Check Stock" butonu dikkatimi çekiyor. Bu buton, stok bilgisini sorgulamak için sunucuya veri gönderiyor olmalı. Hemen Burp Suite ile araya giriyoruz.

2. Araya Sızma: Veri Paketini Yakalamak
Burp Suite Proxy sekmesinde, bu butonun arka planda bir XML paketi gönderdiğini yakalıyoruz. İşte tam burası bizim oyun alanımız. Bu isteği sağ tıklayıp Repeater'a gönderiyoruz ki üzerinde dilediğimiz gibi oynayabilelim.

3. XXE Enjeksiyonu ve SSRF Başlangıcı
Labın açıklamasında bize kritik bir ipucu verilmiş: Bulut sistemlerinde metadata bilgilerinin tutulduğu http://169.254.169.254/ adresi. Amacımız sunucuya bu adrese gitmesini söylemek.
XML yapısının en başına bir !DOCTYPE tanımı ve dış bir "entity" (varlık) ekliyoruz. Sunucuya diyoruz ki: "Bak, 'hacked' adında bir değişkenim var ve bu değişkenin değeri şu adreste saklı." Ardından bu değişkeni <productId> alanına yerleştiriyoruz.

4. Dizinler Arası Dedektiflik (Traversing)
Paketi gönderdiğimizde sunucu bize "Invalid product ID: latest" yanıtını dönüyor. Bu bir hata değil, aslında bir yol haritası! Sunucu verdiğimiz adrese gitti, oradaki "latest" klasörünü gördü ve bize yansıttı.
Bundan sonrası tam bir dedektiflik hikayesi. Payload'un sonuna /latest ekliyoruz ve sunucunun bir sonraki adımda neyi ifşa edeceğini bekliyoruz.


Sunucu bu sefer de bize bir sonraki dizin olan "meta-data" bilgisini veriyor. Bu şekilde adım adım derinlere iniyoruz.

Aynı mantıkla ilerleyerek önce meta-data, sonra iam ve ardından security-credentials dizinlerine ulaşıyoruz. Her seferinde sunucu bize bir sonraki kapının anahtarını veriyor.




5. Final: Gizli Anahtarlar Masada
Son olarak dizinin sonuna /admin eklediğimizde, sunucu artık saklayacak bir şeyi kalmadığını anlayıp bize en kritik bilgileri döküyor: SecretAccessKey, AccessKeyId ve Token.


Sonuç Olarak Ne Öğrendik?
Bu lab bana şunu gösterdi: Bir web uygulamasının sadece XML verisi kabul etmesi bile, eğer doğru yapılandırılmamışsa, tüm bulut altyapısının anahtarlarını saldırgana teslim etmesine neden olabilir. Küçük bir stok sorgulama alanı, doğru bir XXE enjeksiyonuyla devasa bir veri sızıntısına dönüşebiliyor.
Siber güvenlikte altın kuralı unutmamak lazım: Kullanıcıdan gelen hiçbir veriye asla güvenme ve dış varlıkları (External Entities) her zaman kapat!
Okuduğunuz için teşekkürler. Bir sonraki sızma macerasında görüşmek üzere!