Selamlar,
Kritik sonuçlar doğurabilen bir zafiyet türü olan “Server Side Template Injection” (SSTI) konusunu ele alacağız.
1) Template Engine nedir ?
2) Server Side Template Injection nedir ?
3) Nerelerde bulunur ve Etkileri nelerdir ?
4) Payload Seçimi ?
5) Tool yok mu Tool ?
6) Demo Uygulama
Template Engine Nedir ?
Genellikle “Template Engine” şeklinde bahsedilen Şablon Motoru olarak Türkçe’ye çevirebileceğimiz bu şablonlar, uygulamaları daha dinamik hale getirmek için kullanılır. Kendisine verileni tanımlanmış işlemlere sokup sonrasında çıktı üreten bir sistemdir.
MVC (Model View Controller) olarak adlandırılan sistemde ; Model - View - Controller şeklinde 3 adet katman bulunur. Bu katmanlar şu şekilde işler ;
Fazla teorik bilgi olduysa şöyle biraz daha Türkçeleştirelim. Bir foruma üye olduğunuzda “Sevgili xxxxx, kayıt olduğunuz için teşekkür ederiz” şeklinde bir mail alıyorsunuz ya. Ha işte bu mesaj, önceden oluşturulmuş “Teşekkür Mesajı Şablonu” tarafından, sizin kayıt sırasında kullandığınız “xxxxx” kullanıcı adını içerisine alıp yukarıda bahsedilen işlemlerden geçirilip daha sonra size sunuluyor. (Tabii ki bu işi yapmak için Template Engine kullanmak şart değildir.)
Ordan burdan buluşturduğum bazı Template Engine isimleri ;
Şimdi ise işlerin patlak verdiği kısma biraz değinelim. Hackerların sevdiği “bi yerlere bişeyler inject etme” felsefesi, Server Side Template Injection zafiyetini ortaya çıkarıyor ve işin ucu “XSS” den “Arbitrary File Read” a ve hatta “Remote Command Execution” zafiyetlerine kadar dokunuyor. Inject işlemi gerçekleştirilirken kullanılan Template Engine türüne göre farklı payloadlar ile testler gerçekleştirmek gerekmektedir. Payload seçiminde yol göstermesi adına, internette sıkça kullanılan şu görsele hızlı bi göz gezdirin ;
İnternette hali hazırda bulunan Template Engine sistemler haricinde, bireysel olarak oluşturulmuş Template’ler üzerinde testler yaparken ise benzer payloadların yanı sıra, hata mesajlarından faydalanmak veyahut tahmin yürütmek gerekebilmektedir.
Nerelerde bulunur ve Etkileri nelerdir ?
→ Login
→ Register
→ Password Reset
→ Search
→ File Upload
→ URL
→ Header Başlıkları
Şeklinde sıralasakda aslında her türlü input, url, header başlığı vs. bizim testimiz kapsamında ki hedeflerimizdir.
Zafiyetin etkileri ise kullanılan Template Engine’ye göre değişiklik gösterebilmektedir.
Kullanılan Template Engine ve bunların yazıldığı programlama dilleri bizim payload seçimimizi etkileyektir. Genel manada “Template Engine → Payload” eşleşmelerini şöyle sıralayalım ;
Tool yok mu Tool ?
Server Side Template Injection zafiyeti için piyasada en kullanışlı görünen Tplmap tooludur. Kendisi birçok Template Engine için üretilen payloadları test etmektedir. Desteklediği Template Engine listesine, kendi Github Sayfasından şöyle bir tablo şeklinde ulaşabilirsiniz. Fakat hatırlatmakta fayda görüyorum , “hazır araçlar hiçbir zaman kesin sonuç vermezler.”
Demo Uygulama
Jonturk75 ~ @JRBops
Kritik sonuçlar doğurabilen bir zafiyet türü olan “Server Side Template Injection” (SSTI) konusunu ele alacağız.
1) Template Engine nedir ?
2) Server Side Template Injection nedir ?
3) Nerelerde bulunur ve Etkileri nelerdir ?
4) Payload Seçimi ?
5) Tool yok mu Tool ?
6) Demo Uygulama
Template Engine Nedir ?
Genellikle “Template Engine” şeklinde bahsedilen Şablon Motoru olarak Türkçe’ye çevirebileceğimiz bu şablonlar, uygulamaları daha dinamik hale getirmek için kullanılır. Kendisine verileni tanımlanmış işlemlere sokup sonrasında çıktı üreten bir sistemdir.
MVC (Model View Controller) olarak adlandırılan sistemde ; Model - View - Controller şeklinde 3 adet katman bulunur. Bu katmanlar şu şekilde işler ;
Yani kullanıcıdan alınan istek öncelikle “Controller” katmanına ulaşır. Bu katman, istek üzerinde bir işlem yapılacak ise bu isteği “Model” katmanına gönderir. Model katmanı gereken işlemleri gerçekleştirip Controller katmanına tekrar dönüş yapar. Controller katmanı aldığı cevabı “View” katmanına gönderir ve bu katman kullanıcının göreceği asıl sayfayı oluşturur. Bizim “Template Engine”, bu MVC mimarisinin “View” katmanında devreye giriyor ve gelen veriyi, şablonları (template) kullanarak render ediyor. Render ettikten sonra ise kullanıcının görüntüleyeceği hali elde ediliyor.“Kullanıcı isteği → Controller → Model → Controller → View → Çıktı”
Fazla teorik bilgi olduysa şöyle biraz daha Türkçeleştirelim. Bir foruma üye olduğunuzda “Sevgili xxxxx, kayıt olduğunuz için teşekkür ederiz” şeklinde bir mail alıyorsunuz ya. Ha işte bu mesaj, önceden oluşturulmuş “Teşekkür Mesajı Şablonu” tarafından, sizin kayıt sırasında kullandığınız “xxxxx” kullanıcı adını içerisine alıp yukarıda bahsedilen işlemlerden geçirilip daha sonra size sunuluyor. (Tabii ki bu işi yapmak için Template Engine kullanmak şart değildir.)
Ordan burdan buluşturduğum bazı Template Engine isimleri ;
- PHP → Twig , Smarty
- Java → Freemaker , Velocity , WebMacros
- Python → Jinja2, Mako , Django
- Javascript → Jade , Rage
Şimdi ise işlerin patlak verdiği kısma biraz değinelim. Hackerların sevdiği “bi yerlere bişeyler inject etme” felsefesi, Server Side Template Injection zafiyetini ortaya çıkarıyor ve işin ucu “XSS” den “Arbitrary File Read” a ve hatta “Remote Command Execution” zafiyetlerine kadar dokunuyor. Inject işlemi gerçekleştirilirken kullanılan Template Engine türüne göre farklı payloadlar ile testler gerçekleştirmek gerekmektedir. Payload seçiminde yol göstermesi adına, internette sıkça kullanılan şu görsele hızlı bi göz gezdirin ;
İnternette hali hazırda bulunan Template Engine sistemler haricinde, bireysel olarak oluşturulmuş Template’ler üzerinde testler yaparken ise benzer payloadların yanı sıra, hata mesajlarından faydalanmak veyahut tahmin yürütmek gerekebilmektedir.
Nerelerde bulunur ve Etkileri nelerdir ?
→ Login
→ Register
→ Password Reset
→ Search
→ File Upload
→ URL
→ Header Başlıkları
Şeklinde sıralasakda aslında her türlü input, url, header başlığı vs. bizim testimiz kapsamında ki hedeflerimizdir.
Zafiyetin etkileri ise kullanılan Template Engine’ye göre değişiklik gösterebilmektedir.
- [!] Information Disclosure
- [!] XSS
- [!] Arbitrary File Read
- [!] Remote Command Execution
Kullanılan Template Engine ve bunların yazıldığı programlama dilleri bizim payload seçimimizi etkileyektir. Genel manada “Template Engine → Payload” eşleşmelerini şöyle sıralayalım ;
- TWIG ile “id” komutu çalıştırmak için ;
{{_self.env.registerUndefinedFilterCallback(“exec”)}}{{_self.env.getFilter(“id”)}} - SMARTY ile “id” komutu çalıştırmak için ;
{php}echo system(“id”);{/php} - Freemarker ile “id” komutu çalıştırmak için ;
<#assign ex = “freemarker.template.utility.Execute”?new()>${ ex(“id”)} - Mako ile “id” komutu çalıştırmak için ;
<% import os
x=os.popen(‘id’).read()
%>
${x} - Benzer şekilde birçok Template Engine bulunmaktadır. Herbiri için farklı payload seçilmekte ve bu payloadları daha öncede söylediğim gibi, kullanılan Template Engine ve programlama diline göre seçeceksiniz. Payload seçimini daha iyi anlayabilmek için bunları kendi localhostunuz üzerinden kurup denemeler yapıp sonuçlarını incelemeniz faydalı olacaktır.
payloadını girdiğimizde, Title tagları içerisinde jonturk75 çıktısını alabiliyoruz.{php} echo “jonturk75” ; {/php}
payloadını denediğimizde ise Server Side Template Injection zafiyeti üzerinden Remote Command Execution elde etmiş oluyoruz.{php} system(“cat /etc/passwd”); {/php}
payloadımızı kullanarak ise “jon.txt” dosyasına istediğimiz şekilde index bırakabiliyoruz.{php} system (“echo ‘Jonturk75 @ vvHack.Org’ > jon.txt”); {/php}
Tool yok mu Tool ?
Server Side Template Injection zafiyeti için piyasada en kullanışlı görünen Tplmap tooludur. Kendisi birçok Template Engine için üretilen payloadları test etmektedir. Desteklediği Template Engine listesine, kendi Github Sayfasından şöyle bir tablo şeklinde ulaşabilirsiniz. Fakat hatırlatmakta fayda görüyorum , “hazır araçlar hiçbir zaman kesin sonuç vermezler.”
Demo Uygulama
Jonturk75 ~ @JRBops
Moderatör tarafında düzenlendi: