Selamlar TurkHackTeam Ailesi; bugün sizlere SSTI hakkında hem terimsel,
hemde uygulamalı bir şekilde anlatacağım bir konuyla geldim.
Hadi konumuza geçelim.
Server-Side Template Injection (SSTI) Nedir?
SSTI (Server‑Side Template Injection), web uygulamasının kullanıcıdan gelen metni yanlışlıkla
şablon motoruna kod gibi çalıştırmasıdır.
Yani arama kutusuna yazdığın şey sadece ekranda görünmesi gerekirken,
sunucu onu hesaplayıp sonuç döndürebiliyor.
hemde uygulamalı bir şekilde anlatacağım bir konuyla geldim.
Hadi konumuza geçelim.
Server-Side Template Injection (SSTI) Nedir?
SSTI (Server‑Side Template Injection), web uygulamasının kullanıcıdan gelen metni yanlışlıkla
şablon motoruna kod gibi çalıştırmasıdır.
Yani arama kutusuna yazdığın şey sadece ekranda görünmesi gerekirken,
sunucu onu hesaplayıp sonuç döndürebiliyor.
Basit bir benzetme yapalım şimdi daha iyi pekişsin:
Düşün, bir fırın var, içine hamur koyuyorsun ve ekmek bekliyorsun. SSTI’da site senin hamuru alıp
içine bir de yemek tarifi koyuyor
ama bu tarifin içinde kötü bir talimat (ör. “mutfağın anahtarını al”) varsa
fırın o talimatı uygulayabiliyor. Yani kullanıcı girdisi içerik değil,
işlem haline geliyor.
Yani demem o ki bu açık rce ye kadar gider.
Umarım anlaşılmıştır
içine bir de yemek tarifi koyuyor
ama bu tarifin içinde kötü bir talimat (ör. “mutfağın anahtarını al”) varsa
fırın o talimatı uygulayabiliyor. Yani kullanıcı girdisi içerik değil,
işlem haline geliyor.
Yani demem o ki bu açık rce ye kadar gider.
Umarım anlaşılmıştır
Peki Bu Açık Neden Oluşur?
SSTI, temelde geliştiricinin kullanıcı verisini doğrudan işlem olarak kabul etmesinden kaynaklanır.
Yani kullanıcıdan gelen metin içerik olmalı kod olarak çalıştırılmamalı
kod gibi işlendiğinde ise açık ortaya çıkar.
Biraz daha açacak olursak;
Arama/yorum gibi alanlara gelen veriyi olduğu gibi şablona koyup çalıştırırsan (eval/render gibi),
saldırgan bu alana küçük bir talimat yazar
sunucu da onu yürütür. Sonuç dosya okunur, komut çalıştırılır, gizli bilgiler sızar.
Örneklendirerek Anlatalım.
Az öncede anlatmıştım, arama/yorum gibi alanlara yönelelim,
sitemizde ise bir arama çubuğunun olduğunu fark ediyoruz.
Kendimize sormamız gereken soru,
Ben burada bir kod çalıştırabilir veya bir işlem yapabilir miyim?
Yani zafiyetin varlığını test etmeye yönelelim.
Örneğin:
Burda bir sayısal bir işlem döndürüyorum, normalde olması gereken
bu search kısmına ne yazarsak yazalım string değer çalıştırması gerekir.
yani:"7*7"
yazdığımda bunun sonucunu vermek yerine hata mesajı veyahutta "7*7" adına bir sayfa varsa
oraya yönlendirmelidir ki (böyle bir sayfanın olacağı meçhul)
Eğer burada bu işlemin sonucunu veriyorsa bunun gibi;
Bingo doğru yoldasın açığın varlığını tespit etmiş olduk.
Gelelim sömürü konusuna, Nasıl Sömürürüz?
Az öncede bahsettiğimiz gibi kod çalıştırabiliyoruz.
Yani benim buraya küçük bir talimat, çağrı atmam yeterli olacaktır.
Örneğin:
file_get_contents('admin.txt') çağrısını yaparsam ve eğer admin.txt dosyası varsa
bu dosyayı string bir değerde okumama vesile olacak.
Normalde olması gereken 403, 404, fattal error vs vs. gibi pageler dönmesi beklenir.
Fakat eğer bu zafiyeti keşfettiysek dosyayı okuyacaktır.
Örneğin:
Göründüğü Üzere Admin.txt dosyasını okumuş olduk.
Umarım faydalı olmuştur sağlıcakla kalın.
Buraya kadar okuyup benimle birlikte öğrenen varsa teşekkür ederim.
Az öncede bahsettiğimiz gibi kod çalıştırabiliyoruz.
Yani benim buraya küçük bir talimat, çağrı atmam yeterli olacaktır.
Örneğin:
file_get_contents('admin.txt') çağrısını yaparsam ve eğer admin.txt dosyası varsa
bu dosyayı string bir değerde okumama vesile olacak.
Normalde olması gereken 403, 404, fattal error vs vs. gibi pageler dönmesi beklenir.
Fakat eğer bu zafiyeti keşfettiysek dosyayı okuyacaktır.
Örneğin:
Göründüğü Üzere Admin.txt dosyasını okumuş olduk.
Umarım faydalı olmuştur sağlıcakla kalın.
Buraya kadar okuyup benimle birlikte öğrenen varsa teşekkür ederim.
Son düzenleme:




