3 minute read

Server-side template injection, saldırganın bir template’e zararlı bir komut enjekte etmek için template’in syntax’ini kullanmasıdır.

Template engine’ler sabit template’leri değişken verilerle değiştirerek web sayfaları oluşturmak için tasarlanmıştır. Server-side template injection saldırıları, kullanıcıdan alınan inputları doğrulamadan direkt template ile birleştiği durumlarda gerçekleşir. Saldırgan template engine’i manipüle ederek sunucunun tam kontrolünü ele geçirebilir.

Lab 1 Lab 2 Lab 3 Lab 4 Lab 5 Lab 6 Lab 7

Lab-1 Basic server-side template injection

Bu laboratuvarda ERB template’inin doğru yapılandırılmamasından kaynaklı server-side template injection güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için Carlos’un homa dizininden morale.txt silinmelidir.

Uygulamadaki “message” parametresi alınan inputu kullanıcıya geri yansıtmaktadır. Potansiyel bir SSTI zafiyeti oluşabilir.

image-center

Uygulama ERB template kullandığı bilindiğinden ilgili payload parametre ile gönderilmektedir. 49 yanıtı, template engine’in inputu işleyerek çıkan sonucu yazdırdığını göstermektedir.

image-center

Böylelikle istenilen komut yürütülebilir ve carlos dizini altındaki morale.txt silinebilir.

image-center

image-center

Lab-2 Basic server-side template injection (code context)

Bu laboratuvarda Tornado template’inin güvenli olmayan şekilde kullanılmasından kaynaklı server-side template injection güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için Carlos dizini altındaki morale.txt dosyasını silen bir SSTI saldırısı gerçekleştirilmelidir.

Kullanıcı profilinde nickname veya isim olarak gezinme ayarı bulunmakta. Bu ayar değiştirildiğinde input kullanıcıya geri yansıtılmaktadır. Aşağıdaki görselde zafiyetin tespiti için gerekli payload görüntülenmektedir.

image-center

Payload sunucu tarafında hata vermektedir.

image-center

Template engine python tabanlı olduğundan süslü parantezler ile bir ifade yazıldıktan sonra payload yazılmaktadır.

image-center

Bu deneme başarı olup 49 değerini görüntülenmektedir.

image-center

Sunucu üzerinde işletim sistemi komutu çalıştıracak ve carlos dizini altındaki morale.txt dosyasını silecek payload gönderilerek lab tamamlanmaktadır.

image-center

image-center

Lab-3 Server-side template injection using documentation

Bu laboratuvarda server-side template injection güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için template engine’in tespit edilmesi ve keyfi komut çalıştırarak hedef sunucuda bulunan Carlos dizini altındaki morale.txt dosyasının silinmesi gerekmektedir.

Uygulamadaki ürünlerin açıklama kısmını değiştirebilmekteyiz. ${deneme} gibi bir tanım denendiğinde uygulama hata vermektedir ve hata mesajında template engine’in FreeMarker olduğu görüntülenmektedir.

image-center

FreeMarker dökümanlarında okuma yaparak hedef işletim sistemi üzerinde morale.txt dosyasını silmeye yarayan komut oluşturulmaktadır.

image-center

image-center

Lab-4 Server-side template injection in an unknown language with a documented exploit

Bu laboratuvarda server-side template injection güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için template engine’in tespit edilip carlos dizini altında bulunan morale.txt dosyasının silinmesi gerekmektedir.

Uygulamada bulunan message parametresi üzerinde random payload’lar deneyerek bir hata mesajı elde edilmektedir. Hata mesajında template engine’in handlebars olduğu görüntülenmektedir.

image-center

Handlebars hakkında araştırma yapılarak aşağıdaki görselde görüntüleneceği üzere işletim sistemi üzerinde komut yürütme payload’ına erişilmektedir.

image-center

URL encoding yaparak ilgili payload sunucuya gönderildiğinde lab tamamlanmaktadır.

image-center

image-center

Lab-5 Server-side template injection with information disclosure via user-supplied objects

Bu laboratuvarda server-side template injection güvenlik zafiyeti bulunmaktadır. Bu güvenlik zafiyeti hassas verileri ifşa etmektedir. Lab’ın tamamlanması için framework’ün secret key bilgisi elde edilmelidir.

Çeşitli payload’lar denenerek hata mesajı alınmaktadır ve hata mesajında kullanılan template tespit edilmektedir.

image-center

Django’da secret key verisini alabilemek için aşağıdaki kod yazılmaktadır.

image-center

image-center

Lab-6 Server-side template injection in a sandboxed environment

Bu laboratuvar Freemarker Template engine kullanmaktadır. Laboratuvarda sandbox’un yanlış yapılandırılmasından kaynaklı server-side template injection güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için sandbox’un atlatılıp carlos dizini altındaki my_password.txt dosyasının okunması gerekmektedir.

Template engine’in Freemarker oldu bilindiğinden araştırma yapıldığında Sandbox bypass adı altında bir payload bulunmaktadır.

image-center

Uygulamanın default olarak verdiği text’te daha önce article’ın product olduğu görüntülenmişti ilgili payload düzenlenerek hedef uygulamaya gönderilmektedir ve id verisi okunmaktadır.

image-center

Lab’ın istediği parola dosyasının okunması için payload düzenlenerek tekrar gönderilmektedir.

image-center

image-center

Lab-7 Server-side template injection with a custom exploit

Bu laboratuvarda server-side template injection güvenlik zafiyeti bulunmaktadır. Lab’ın tamamlanması için carlos dizinindeki /.ssh/id_rsa dosyasının silinmesi gerekmektedir.

Uygulamada avatar yükleme fonksiyonu bulunmaktadır ve invalid bir dosya gönderildiğinde aşağıdaki hata mesajı alınmaktadır. Bu hata mesajı bize User.setAvatar() fonksiyonu gibi güzel bir ipucu vermektedir.

image-center

Daha sonrasında uygulamada bulunan lakap-gerçek isim değiştirme requesti incelendiğinde user.setAvatar’ı kullanılabilecek potansiyel bir input alanı gözlenmektedir. /etc/passwd dosyasının okunması için payload oluşturulmaktadır.

image-center

Daha sonra wiener kullanıcısının avatarına gidildiğinde /etc/passwd dosyası görüntülenmektedir.

image-center

image-center

Carlos kullanıcısının id_rsa verisini okumak için payload düzenlenmektedir.

image-center

image-center

Laboratuvar bizden dosyanın silinmesini istemektedir. İlk görseldeki hata mesajında elde ettiğimiz User.php dosyasının içeriği incelendiğinde gdprDelete() isimli bir fonksiyon tespit edilmiştir. Bu fonksiyon avatar’ı silmektedir. Avatar, carlos kullanıcısının id_rsa dosyası olarak az önceki gibi ayarlanıp gdprDelete() fonksiyonu çağırıldığında id_rsa dosyası silinmektedir.

image-center

image-center