July 29, 2026
SSRF (Server Side Request Forgery) Nedir?
Türkçe karşılığı “Sunucu Taraflı İstek Sahtekarlığı” olan SSRF, saldırganın hedef sunucudaki uygulamayı manipüle ederek, sunucu adına kötü…
By Mert Budak
4 min read
Türkçe karşılığı "Sunucu Taraflı İstek Sahtekarlığı" olan SSRF, saldırganın hedef sunucudaki uygulamayı manipüle ederek, sunucu adına kötü niyetli istekler göndermesini sağlayan kritik bir web zafiyetidir.
Başarıyla gerçekleşmiş SSRF saldırısı sonucunda sistemdeki veriler sızdırılabilir ve normal şartlarda erişilemeyen iç servislerde yetkisiz işlemler gerçekleşebilir. Hatta bazı durumlarda saldırgana hedef sistemde komut çalıştırma (Command injection/RCE) olanağı da tanır.
Saldırganlar bu zafiyeti sömürürken, doğrudan erişemedikleri gizli bir iç ağa veya servise hedef sunucuyu bir köprü olarak kullanarak sızarlar. Mantığı basittir sunucuya "Git, şu içerideki adresten bana veri getir!" diyerek onu manipüle ederler. Sunucu da bu isteğin güvenli bir iç kaynaktan geldiğini varsayarak sahte isteği tereddütsüz işleme alır.
PortSwigger Üzerinden Örnekler
Örnek 1
Uygulama, stok durumunu kontrol ederken iç sistemden veri çekiyor. Bizden stok kontrolü yapan mekanizmayı manipüle ederek admin paneline erişmemiz ve Carlos kullanıcısını silmemiz isteniyor
Request kısmındaki "stockApi" parametresinde hangi ürünün stok değeri sorgulandığı bilgisi yer alıyordu. O parametreyi Admin paneline erişip Carlos kullanıcısını silecek şekilde değiştirince lab çözülmüş oldu. admin paneli lab tanımında verilmişti URL sonuna carlos kullanıcısı silmek için /delete?username=carlos ifadesini ekledik. URL de yer alan ":" vb. karakterleri de URL Encoding yaparak yazdık.
Karakterler URL Encoding Karşılıkları
: %3A
/ %2F
? %3F
= %3D
Karakterler URL Encoding Karşılıkları
: %3A
/ %2F
? %3F
= %3D
Örnek 2
Uygulama, stok durumunu kontrol ederken iç sistemden veri çekiyor. Admin paneli hakkında IP adresi 192.168.0.X ( IP adresinde son oktet verilmemiş bunu biz bulacağız) 8080 portu üzerinde olduğu bilgileri verilmiş. Bizden carlos kullanıcısını silmemiz isteniyor.
Ürünün stok bilgisini sorguladığımız Request bu. IP adresinde verilmeyen oktet değerini bulmak için Brute-Force saldırsı gerekiyor. Bu sebeple bu Request Intruder'a gönderiliyor. Intruder da Sniper modülünü ayarlayıp Brute-Force saldırısı başlatıyoruz.
Brute-Force sonucunda son oktet değerinin 85 olduğunu görüyoruz.
admin panelinin IP adresinin son oktet değeri 85 olduğunu tespit edince. http://192.168.0.85:8080/admin admin panelinin olduğu URL sonuna sonuna carlos kullanıcısını silmek için ilk örnekte yaptığımız gibi /delete?username=carlos ifadesini ekliyoruz . carlos kullanıcısı silinince lab çözülmüş oluyor. URL de yer alan ":" vb. karakterlerini de URL Encoding yaparak yazıyoruz.
Örnek 3
Uygulama, stok durumunu kontrol ederken iç sistemden veri çekiyor. admin arayüzü localhost üzerinde olduğu bilgisi verilmiş ve bizden carlos kullanıcı silmemiz isteniyor.
Lab tanımında "Geliştirici sisteme 2 tane zayıf SSRF koruması koymuş, atlatmanız gerekiyor." şeklinde bir ifade yer alıyordu. Hiç koruma olmasaydı bu örneği ilk örnekteki gibi çözebilirdik ama 2 tane zayıf koruma mevcut.
-
Zayıf koruma localhost yerine 127.0.0.1 ifadesi de yazılabilir. 127.0.0.1 ifadesi yazınca admin paneline erişemiyoruz çünkü filtreleniyor. Bu zayıf korumayı atlatmak için 127.0.1 şeklinde yazıyoruz (Alternatif olarak 127.1 vb. farklı şekillerde de yazılabilir.)
-
Zayıf koruma /admin şeklinde yazarak admin paneline erişemiyoruz çünkü filtreleniyor. Bu zayıf korumayı atlatmak için /admin yazmak yerine /aDMin , /AdMiN vb. şekillerde bazı harfleri büyük bazı harfleri küçük yazıyoruz.
Önceki örneklerde olduğu gibi URL içerisinde yer alan "?" vb karakterleri URL Encoding yaparak yazıyoruz. carlos kullanıcısını silince lab çözülmüş oluyor.
Örnek 4
Uygulama, stok durumunu kontrol ederken iç sistemden veri çekiyor. Önceki örneklerde olduğu gibi admin panelinin bilgisi verilmiş ve carlos kullanıcısı silmemizi istiyor. Stok kontrol mekanizmasına doğrudan URL yazıp admin paneline erişemiyoruz bu sebeple önceki örneklerden farklı olarak yeniden yönlendirme yaparak carlos kullanıcısını sileceğiz.
Hedef sisteme requestler göndererek inceleme yapmak gerekiyor. Sonraki ürüne geçerken bir response kısmında 302 yanıtını alıyoruz yani burada yönlendirme yapılıyor 1 numaralı üründen 2 numaralı ürüne geçiyor. Bunu kullanacağız.
Yapılan yönlendirmeyi 1 numaralı üründen 2 numaralı ürüne geçmek vb. şekilde değil de admin paneline erişmek için kullandık. admin paneline erişip carlos kullanıcısı silinince de lab çözülmüş oldu.
SSRF Nasıl Engellenir
A- Beyaz Liste (whitelist) Oluşturmak
Sunucunun dışarıdan veri çekmesi gerekiyorsa, sadece izin verilen güvenilir domainlerin yer aldığı bir Beyaz Liste oluşturun. Gelen girdi bu listede yoksa isteği anında reddedin. Blacklist oluşturmak SSRF zafiyetini engellemekte işe yaramayacaktır.
B- İç ve Dış IP Erişimi Kısıtlamaları (Network Seviyesi)
Sunucunun, şirket içi hassas ağlara veya bulut sağlayıcısının özel servislerine erişimi network (firewall) düzeyinde engellenmelidir.
Uygulama sunucunuzun 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 ve 127.0.0.0/8 gibi lokal IP adreslerine dışarıdan aldığı girdilerle istek atmasını engelleyin.
Yalnızca Gerekli Portlar: Sunucunun dış dünyaya yapacağı istekleri sadece 80 (HTTP) ve 443 (HTTPS) portları ile sınırlandırın. Sunucunun iç ağdaki 22 (SSH) veya 3306 (MySQL) gibi portları taramasına izin vermeyin.
C- Girdilerin ve Yanıtların Doğrulanması (Uygulama Seviyesi)
Kullanıcıdan alınan URL girdisini kontrol etmek göründüğünden daha karmaşıktır. Çünkü kullanıcı http://guvenli-site.com yazar ama o site sunucunuza 302 Redirect (Yönlendirme) yanıtı vererek sunucuyu http://localhost:8080 adresine yönlendirebilir.
Yönlendirmeleri (Redirects) Kapatın: HTTP istemcinizin HTTP 301/302 yönlendirmelerini otomatik olarak takip etmesini engelleyin; saldırganlar bu yolla whitelist kontrollerini atlatabilir.
DNS Çözümleme Kontrolü (Resolve Time Check): Kullanıcı bir domain girdiğinde, kodunuz önce bu domainin hangi IP'ye çıktığını kontrol etmeli, eğer IP bir iç ağ IP'si ise isteği sonlandırmalıdır.
Eğer uygulamanızın mutlaka kullanıcılardan gelen URL'lere istek atması gerekiyorsa (örneğin web sitesi ekran görüntüsü alma veya profil resmi yükleme servisleri), bu işlemi ana sunucunuzda yapmayın. Bu iş için iç ağa hiçbir erişimi olmayan, tamamen izole edilmiş, internete açık ve işi bittiğinde yok olan ayrı bir mikro servis (veya proxy sunucusu) kullanın.