Server Side Template Injection

Server Side Template Injection Nedir Nasıl Tespit edilir?

Bu zafiyeti nerde arayabiliriz ilk başta buna değinelim. Örneğin biz alperen şeklinde bir değer girdik ve karşımıza çıkan html sayfasında bu değer bize dönüyorsa ilk arama noktasına gelmişiz demektir(Direkt olarak açık olduğunu düşünmemeliyiz, sadece test edeceğimiz bölgeyi bulduk). Ayrıyeten test yapacağımız diğer bölümler de gönderdiğimiz bir dosya olabilir veya daha önce girdiğimiz kişisel bilgilerimiz olabilir. Kısacası herhangi bir değer girebileceğimiz ve bize bir cevap döndüren yerlerde bu zafiyeti test edebiliriz küçük bir örnek verelim:

 alperen.alışveriş-sitesi.com da satıcılar ürün açıklama kısmına bilgileri ekler ve artık ürün sayfasında bu yazılar karşımıza çıkar işte burada da bu zafiyet test edilebilir.

Peki Nasıl Test Ederiz?

Eğer test yapacağımız yeri bulduysak ilk başta şablon motorunu tanımalıyız, şablon motorunu yani hangi sembol kullanarak bu zafiyete ulaşacağımızı anlamamız için bir tablo ile açıklayalım.

 

 

Aşağıdaki tabloda gördüğümüz gibi test yapacağımız yere ${7*8} ile çarpma işlemi yaptırmaya çalışıyoruz eğer çarpma işlemini yaparsa bu sefer komut çalıştırıyoruz ve komutta başarılı olursa mako şablonu ile oluşturulmuş diyebiliyoruz aşağıdaki gibi adımları izleyerek bir tespitte bulunabiliriz. Ve şablonun oluşturulduğu dil ile çeşitli enjeksiyon deneme fırsatımız ve bu zafiyetin direkt olarak işletim sisteminde kod çalıştırmaya gidebilir veya uzaktan kod yürütme zafiyetine kadar ilerlememiz mümkün.

image

 

Şimdi PortSwigger’ın hazırladığı labaratuvar ile örneklere bakalım:

image

Burada bize ERB şablonunda bir zafiyet olduğunu ve carlosun home dizinindeki morale.txt dosyasını silmemizi istiyor.

İlk başta ERB şablonu ile ilgili bilgiler edinmemiz için dökümanlarını okuyabiliriz ya da hazır enjeksiyonlar için ERB payloads şeklinde arama yapabilirim.

image

Şimdi testi nereye yapabileceğimizi tespit edelim.

image

Ürünler ile ilgili detayları görüntüle kısmında ilk baştaki stoklar ile ilgili bir hata verdi ve html sayfasında çalıştı yani back end den  gelen cevap front end bölümünde gözüktü.

image