Hoşgeldin Misafir

İçeriden Gelen İhanet: SSRF (Server-Side Request Forgery)

CwMuhibban

20 Ara 2025
67 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Selamın aleyküm kardeşlerim

Konumuz SSRF yani Server-Side Request Forgery. Bir web sitesini test ederken bazen uygulamanın sizden bir link istediğini görürsünüz. Örneğin bir foruma kayıt olurken "Profil resmini URL'den çek" kutucuğu veya e-ticaret sitesinde "Faturayı PDF olarak oluştur" butonu gibi. İşte uygulamanın dış dünyadan bir veri çekmeye çalıştığı o an, sunucuyu kendi silahıyla vurma fırsatının doğduğu andır.

SSRF Nedir (Güvenilir Kurye Mantığı)​

gtck5ad.png


Sunucu dediğimiz yapı aslında dış dünyadaki tehlikelere kapalı olan, güvenlik duvarlarıyla korunan bir kaledir. Siz bu kalenin içindeki kuryeye bir not verirsiniz ve "Git bana şu adresteki resmi al getir" dersiniz. Kurye kaleden çıkar, resmi alır ve size getirir. Buraya kadar sistem normal çalışıyor. Ama ya siz kuryeye dışarıdaki bir adresi değil de, kalenin kendi içindeki gizli bir odanın adresini verirseniz ne olur.

Normalde bir saldırgan olarak sizin sunucunun iç ağındaki veritabanına veya yerel dosyalarına doğrudan erişiminiz yoktur. Güvenlik duvarı sizi anında engeller. Ancak kurye yani sunucunun kendisi zaten içeridedir. İçerideki kurye kalenin kendi kapısını çaldığında kimse ona kimlik sormaz.

Gerçek Hayat Senaryosu: Masum Bir Profil Resmi​

Düşünün ki büyük bir forum sitesine kayıt oldunuz. Sistem size profil resmi yüklemek için iki seçenek sunuyor. Ya bilgisayardan seçeceksiniz ya da bir resim linki vereceksiniz. Siz link verme kutucuğuna [http://resim-sitesi.com/avatar.jpg](http://resim-sitesi.com/avatar.jpg) yazdınız. Sunucu gitti o resmi aldı ve profilinize koydu.

Şimdi hacker şapkamızı takalım. O kutucuğa resim linki yerine
Kod:
[http://127.0.0.1:3306]
(http://127.0.0.1:3306)

ya da
Kod:
http://localhost:22

yazdığımızı düşünelim.

Sunucu bu isteği aldığında dışarıya gitmek yerine kendi içindeki 3306 portuna yani veritabanına bakmaya çalışacaktır. Güvenlik duvarı dışarıdan gelen size kapalıdır ama sunucu kendi kendine soru sorduğu için kapılar ardına kadar açılır. Sonuç olarak profil resminiz olduğu yerde veritabanının hata mesajlarını veya sunucunun iç ağına ait banner bilgilerini okumaya başlarsınız. Kendi bilgisayarınızdan asla ulaşamayacağınız bir yere, sunucuyu aracı kılarak ulaştınız.

Bulut Sistemlerinin Kabusu: Metadata Saldırısı​

Günümüzde artık kimse fiziksel sunucu barındırmıyor, herkes AWS, Azure veya Google Cloud gibi bulut sistemlerini kullanıyor. Bu bulut sunucularının kendi içlerinde "Metadata" adını verdikleri, sadece yerel ağdan erişilebilen gizli bir bilgi havuzu vardır.

Eğer bulutta koşan bir uygulamada SSRF zafiyeti bulursanız, kuryeye şu sihirli adresi verirsiniz:
Kod:
[http://169.254.169.254/latest/meta-data/]
(http://169.254.169.254/latest/meta-data/)

Bu IP adresi bulut sistemlerinin evrensel kara kutusudur. Sunucu bu adrese gidip o paketi açtığında, size sunucunun en gizli AWS erişim anahtarlarını, IAM tokenlarını ve tüm bulut altyapısının kontrolünü altın tepside sunar. Hiçbir exploit kodu yazmadan, sadece bir URL girerek koca bir şirketin bulut altyapısını ele geçirmiş olursunuz.

t43exs6.png


Nasıl Korunulur ve Güvenli Kodlama​

Sadece "beyaz liste kullanın" deyip geçmek siber güvenlikçi mantığına uymaz, işin mutfağına inmemiz gerekiyor. Bir yazılımcı URL çekerken girilen adresi sadece metin olarak kontrol etmemelidir. Çünkü saldırgan 127.0.0.1 yerine 0.0.0.0 veya onluk tabanda 2130706433 yazarak basit filtreleri atlatabilir.

En kesin çözüm, kullanıcının girdiği alan adını (domain) önce IP adresine çevirmek (DNS Resolve) ve bu IP adresinin yerel bir ağa ait olup olmadığını kontrol etmektir. Python kullanan bir uygulamanın güvenli kod yaklaşımı şu şekilde olmalıdır:
Python:
import socket
import ipaddress
import requests

def guvenli_url_getir(kullanici_url):

try:
# 1. URL'den domain kısmını ayıklıyoruz

hostname = kullanici_url.split('/')[2]

# 2. Domain'in gerçek IP adresini çözümlüyoruz

cozulen_ip = socket.gethostbyname(hostname)

ip_objesi = ipaddress.ip_address(cozulen_ip)

# 3. IP adresinin yerel ağlara (localhost vb.) ait olup olmadığını denetliyoruz

if ip_objesi.is_private or ip_objesi.is_loopback:

return "Erişim engellendi: Yerel ağlara istek atılamaz."

# 4. Sadece güvenli protokolleri kabul ediyoruz (file:// veya gopher:// engeli)

if not kullanici_url.startswith(("http://", "https://")):

return "Sadece HTTP/HTTPS protokolleri desteklenir."

# Her şey güvenliyse isteği at

cevap = requests.get(kullanici_url, timeout=5)

return cevap.text

except Exception as e:

return "Bağlantı hatası veya geçersiz URL."

Bu kod bloğu sayesinde saldırgan ne kadar kelime oyunu yaparsa yapsın, sistem önce o adresin nihai IP adresine bakar. Eğer hedef içerideki bir yerse kapıyı anında kapatır.

Ayrıca tehlikeli protokollerle konuşulmasını da baştan engellemiş oluruz.

Son Söz​

Siber güvenlikte en büyük yanılgı, aşılmaz bir güvenlik duvarı kurduğumuzda içerideki her şeyin güvende olduğunu düşünmektir. SSRF zafiyeti bize gösteriyor ki sistemin kendi içindeki güven ilişkileri, dışarıdan gelecek kaba kuvvet saldırılarından çok daha tehlikeli olabilir. Bir yazılımcı veya sistem yöneticisi olarak dikkat etmeniz gereken en temel kural, girdinin kimden veya nereden geldiğine bakılmaksızın asla körü körüne güvenmemektir.

Geliştirdiğiniz projelerde veya sızma testi yaptığınız sistemlerde dış kaynaklardan veri çekiliyorsa, sadece dış kapıyı değil içerideki odaların kapılarını da kilitli tutmayı bir standart haline getirmelisiniz. Yazılım mimarisini kurgularken içerideki bileşenlerin birbirine olan yetkilerini her zaman en alt seviyede tutmak zorundasınız. Unutmayın siber savaşlarda devasa kaleler genellikle dış surların yıkılmasıyla değil, içeri sızan bir kuryenin kapıları içeriden açmasıyla düşer.

Hayırlı günler dilerim, Allah'a emanet olun.
 

Meyyid

24 Nis 2026
37 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Selamın aleyküm kardeşlerim

Konumuz SSRF yani Server-Side Request Forgery. Bir web sitesini test ederken bazen uygulamanın sizden bir link istediğini görürsünüz. Örneğin bir foruma kayıt olurken "Profil resmini URL'den çek" kutucuğu veya e-ticaret sitesinde "Faturayı PDF olarak oluştur" butonu gibi. İşte uygulamanın dış dünyadan bir veri çekmeye çalıştığı o an, sunucuyu kendi silahıyla vurma fırsatının doğduğu andır.

SSRF Nedir (Güvenilir Kurye Mantığı)​

gtck5ad.png


Sunucu dediğimiz yapı aslında dış dünyadaki tehlikelere kapalı olan, güvenlik duvarlarıyla korunan bir kaledir. Siz bu kalenin içindeki kuryeye bir not verirsiniz ve "Git bana şu adresteki resmi al getir" dersiniz. Kurye kaleden çıkar, resmi alır ve size getirir. Buraya kadar sistem normal çalışıyor. Ama ya siz kuryeye dışarıdaki bir adresi değil de, kalenin kendi içindeki gizli bir odanın adresini verirseniz ne olur.

Normalde bir saldırgan olarak sizin sunucunun iç ağındaki veritabanına veya yerel dosyalarına doğrudan erişiminiz yoktur. Güvenlik duvarı sizi anında engeller. Ancak kurye yani sunucunun kendisi zaten içeridedir. İçerideki kurye kalenin kendi kapısını çaldığında kimse ona kimlik sormaz.

Gerçek Hayat Senaryosu: Masum Bir Profil Resmi​

Düşünün ki büyük bir forum sitesine kayıt oldunuz. Sistem size profil resmi yüklemek için iki seçenek sunuyor. Ya bilgisayardan seçeceksiniz ya da bir resim linki vereceksiniz. Siz link verme kutucuğuna [http://resim-sitesi.com/avatar.jpg](http://resim-sitesi.com/avatar.jpg) yazdınız. Sunucu gitti o resmi aldı ve profilinize koydu.

Şimdi hacker şapkamızı takalım. O kutucuğa resim linki yerine
Kod:
[http://127.0.0.1:3306]
(http://127.0.0.1:3306)

ya da
Kod:
http://localhost:22

yazdığımızı düşünelim.

Sunucu bu isteği aldığında dışarıya gitmek yerine kendi içindeki 3306 portuna yani veritabanına bakmaya çalışacaktır. Güvenlik duvarı dışarıdan gelen size kapalıdır ama sunucu kendi kendine soru sorduğu için kapılar ardına kadar açılır. Sonuç olarak profil resminiz olduğu yerde veritabanının hata mesajlarını veya sunucunun iç ağına ait banner bilgilerini okumaya başlarsınız. Kendi bilgisayarınızdan asla ulaşamayacağınız bir yere, sunucuyu aracı kılarak ulaştınız.

Bulut Sistemlerinin Kabusu: Metadata Saldırısı​

Günümüzde artık kimse fiziksel sunucu barındırmıyor, herkes AWS, Azure veya Google Cloud gibi bulut sistemlerini kullanıyor. Bu bulut sunucularının kendi içlerinde "Metadata" adını verdikleri, sadece yerel ağdan erişilebilen gizli bir bilgi havuzu vardır.

Eğer bulutta koşan bir uygulamada SSRF zafiyeti bulursanız, kuryeye şu sihirli adresi verirsiniz:
Kod:
[http://169.254.169.254/latest/meta-data/]
(http://169.254.169.254/latest/meta-data/)

Bu IP adresi bulut sistemlerinin evrensel kara kutusudur. Sunucu bu adrese gidip o paketi açtığında, size sunucunun en gizli AWS erişim anahtarlarını, IAM tokenlarını ve tüm bulut altyapısının kontrolünü altın tepside sunar. Hiçbir exploit kodu yazmadan, sadece bir URL girerek koca bir şirketin bulut altyapısını ele geçirmiş olursunuz.

t43exs6.png


Nasıl Korunulur ve Güvenli Kodlama​

Sadece "beyaz liste kullanın" deyip geçmek siber güvenlikçi mantığına uymaz, işin mutfağına inmemiz gerekiyor. Bir yazılımcı URL çekerken girilen adresi sadece metin olarak kontrol etmemelidir. Çünkü saldırgan 127.0.0.1 yerine 0.0.0.0 veya onluk tabanda 2130706433 yazarak basit filtreleri atlatabilir.

En kesin çözüm, kullanıcının girdiği alan adını (domain) önce IP adresine çevirmek (DNS Resolve) ve bu IP adresinin yerel bir ağa ait olup olmadığını kontrol etmektir. Python kullanan bir uygulamanın güvenli kod yaklaşımı şu şekilde olmalıdır:
Python:
import socket
import ipaddress
import requests

def guvenli_url_getir(kullanici_url):

try:
# 1. URL'den domain kısmını ayıklıyoruz

hostname = kullanici_url.split('/')[2]

# 2. Domain'in gerçek IP adresini çözümlüyoruz

cozulen_ip = socket.gethostbyname(hostname)

ip_objesi = ipaddress.ip_address(cozulen_ip)

# 3. IP adresinin yerel ağlara (localhost vb.) ait olup olmadığını denetliyoruz

if ip_objesi.is_private or ip_objesi.is_loopback:

return "Erişim engellendi: Yerel ağlara istek atılamaz."

# 4. Sadece güvenli protokolleri kabul ediyoruz (file:// veya gopher:// engeli)

if not kullanici_url.startswith(("http://", "https://")):

return "Sadece HTTP/HTTPS protokolleri desteklenir."

# Her şey güvenliyse isteği at

cevap = requests.get(kullanici_url, timeout=5)

return cevap.text

except Exception as e:

return "Bağlantı hatası veya geçersiz URL."

Bu kod bloğu sayesinde saldırgan ne kadar kelime oyunu yaparsa yapsın, sistem önce o adresin nihai IP adresine bakar. Eğer hedef içerideki bir yerse kapıyı anında kapatır.

Ayrıca tehlikeli protokollerle konuşulmasını da baştan engellemiş oluruz.

Son Söz​

Siber güvenlikte en büyük yanılgı, aşılmaz bir güvenlik duvarı kurduğumuzda içerideki her şeyin güvende olduğunu düşünmektir. SSRF zafiyeti bize gösteriyor ki sistemin kendi içindeki güven ilişkileri, dışarıdan gelecek kaba kuvvet saldırılarından çok daha tehlikeli olabilir. Bir yazılımcı veya sistem yöneticisi olarak dikkat etmeniz gereken en temel kural, girdinin kimden veya nereden geldiğine bakılmaksızın asla körü körüne güvenmemektir.

Geliştirdiğiniz projelerde veya sızma testi yaptığınız sistemlerde dış kaynaklardan veri çekiliyorsa, sadece dış kapıyı değil içerideki odaların kapılarını da kilitli tutmayı bir standart haline getirmelisiniz. Yazılım mimarisini kurgularken içerideki bileşenlerin birbirine olan yetkilerini her zaman en alt seviyede tutmak zorundasınız. Unutmayın siber savaşlarda devasa kaleler genellikle dış surların yıkılmasıyla değil, içeri sızan bir kuryenin kapıları içeriden açmasıyla düşer.

Hayırlı günler dilerim, Allah'a emanet olun.
Teşekkürler devamını bekleriz