Server Side Template Injection Nedir?

Bu yazıda Server Side Template Injection konusunda yakından bakacağız. Her zaman olduğu gibi konunun daha iyi anlaşılabilmesi için önce bilmemiz gereken terim ve detaylara bakalım.

Bilinmesi Gereken Konular

1.MVC Mimarisi

MVC, açılımı ile Model-View-Controller yazılım mühendisliğinde kullanılan bir mimari desendir. Amaç yazılan uygulamaların business logic kısmı ile kullanıcı arayüzünü birbirinden ayırıp uygulamaların farklı amaçlara hizmet eden yapılarının birbirinden ayrı olarak geliştirilebilmesini ve test edilebilmesini sağlamaktır.

Örnek vermek gerekirse uygulamanın sadece görünüşünde bir değişiklik yapılması gerektiğinde sadece view ile çalışma kolaylığımız olacaktır. Ayrıca avantajımız sadece belirli yerleri düzenlemek değil aynı zamanda model ve view yapılarında ihtiyaç duyulan parçaların başka projelerde de tekrar kullanılabilir hale gelmesidir.

Şimdi Model, view ve controller kısımlarını ayrı ayrı inceleyelim.

1.1.Model

Uygulamanın kullanan verilerini temsil eder ve verilerin işlenme mantığı buradadır. Verilerin onaylanma süreçleri burada gerçekleştirilir.

1.2.View

Bu kısım ise uygulamanın kullanıcıya sunulan kısmıdır. Yani bir web application ile etkileşime geçen kullanıcı View kısmı ile yani arayüz ile haşır neşir olmaktadır.

1.3.Controller

Bu bölümde model ve view arasındaki işlemler gerçekleştirilir. Kullanıcıların view üzerinde yaptığı işlemler sonucu çıkan veri model’e taşınır. Model’dan alınan veri de view üzerinden tekrar kullanıcıya gösterilir.

StackExchange’de farklı bir bakış açısı ile bu medelleme anlatılmış. Bunu alıntı olarak paylaşmak istedim:

“Satranç uygulaması yaptığımızı düşünelim…

Model’de oyunun “durumu” barındırılacaktır. Oyunun durumunu değiştirecek etkiler (örneğin bir taşın hareketinin doğru olup olmadığı) veya oyunun bitip bitmediği gibi bilgiler model üzerinde yer alacaktır. (Kısaca, oyunun tüm bilgileri ve yapılacak işlemlerin validasyonu Model üzerinde barınacak)

View kısmında satranç tahtasının görünümü, yönettiğimiz piyonların şekilleri ve piyonları hareket ettirdiğimizde hangi piyonun nereye gittiğini söyleyen bildirimler yer alacaktır. Piyonların nasıl hareket ettiği, oyunun durumuyla ilgili mantıksal bilgilerin View ile hiçbir işi olmayacaktır. View sadece ve sadece görselliği barındıracaktır.

Controller ise View ve Model arasında haberleşmeyi sağlayacaktır. Örneğin, kullanıcı View’da yer alan “Yeni oyun başlat” butonuna bastığında Controller, Model’e giderek böyle bir isteğin geldiğini söyleyecektir. (Tüm bu işleri yapan Model olacaktır, Controller’ın amacı böyle bir isteğin geldiğini ve alakalı isteğin detaylarını Model’e iletmektir)

Peki kazancımız ne oldu?

Model veya View üzerinde değişiklik yapmak istediğimizde bu değişiklikler Model veya View’u artık etkilemeyecek. Yapılan bu değişiklikler Controller’ın yapısını değiştirmemize sebep verebilir ama hiç değilse değişiklik yapacağımız yeri sabit kısımlardan ayırmış olup spagetti kodu engellemiş olduk.

Model ya da View’u tekrar kullanabilir hale getirdik. Örneğin Model olarak RSS feed’i kullanıp View’u sabit tutarak, daha önceden oynanmış oyunları hazırladığımız View üzerinde gösterebiliriz. (Replay misali) Veya View’u değiştirip Model’i sabit tutarak oyunu hem Web sitesi üzerinden hem de Konsol uygulaması üzerinden oynanabilir hale getirebiliriz.

Hem View hem de Model’i iyi ayrıştırdığımız için bu yapılara Ünite testi yazmayı da kolaylaştırmış olduk.”

2. Template Engine

Template Engine MVC mimarisinin View katmanında yer alan ve controller katmanından gelen veriyi işleyerek HTML formatında kullanıcıya ileten engine’lerdir.

Kullanıcıdan bir istek geldiğinde bu istek önce controller katmanına ulaşır. Eğer istek üzerinden bir işlem yapılacaksa bu istek model katmanına gönderilir. Model katmanı da yapması gereken işlemleri yaparak controller katmamına dönüş yapar. Controller ise aldığı cevabı view katmanına ulaştırarak kullanıcının göreceği sayfayı oluşturmuş olur. Bu özette template engine tam olarak view katmanında devreye girer ve gelen veriyi kullanıcıya sunulmadan önce template kullanarak render eder.

Template Engine Örnekleri:

• PHP’de Twig ve Smarty
• Java’da Freemaker, Velocity ve WebMacros
• Python’da Django, Jinja2 ve Mako
• Javascript’te Rage ve Jade

Server Side Template Injection Nedir?

Server Side Template Injection, Template Engine’lerin beklenenin dışında girdi alması sonucu ortaya çıkan bir saldırı türüdür. XSS çalıştırılabilir, Remote Code Execusion elde edilebilir.

Hedef sistemde Template Injection tespit etmek için kullanıcı olarak yapmış olduğumuz bir girdinin sunucu tarafından bir değişkenle birleşip template üzerine işleniyor olması orada Template Injection olduğunu gösterebilir.

Server Side Template Injection saldırısı yapabilmek için öncelikle hedef sistemde XSS çalıştırabiliyor muyuz onu kontrol ederiz. Eğer XSS çalıştırabiliyorsak template injection olabilir diye düşünebiliriz.

XSS çalıştırdığımızı varsayalım, daha sonra basit bir matematik işlemi çalıştırmayı deneyebiliriz. Eğer matematik işlemimiz çalışıp sayfaya basılıyor ise orada Template injection vardır diyebiliriz.

Template injection olduğunu tespit ettikten sonra uygulanması gereken ilk adım şablon motorunun tanımlanmasıdır. Bunun için de karşı tarafa hata verdirmeyi deneyebiliriz.

Hata mesajları üzerinden motoru tanımladıysak, daha sonra erişebildiğimiz tüm belgeleri okumaya çalışabiliriz. Ulaşacağımız belgelerden ekstra bilgiler elde ederek sistem ve içerik hakkında daha detaylı bilgiye sahip olur ve saldırı taktiğimizi ona göre güncelleyebiliriz.

Bundan sonra ise öğrendiğimiz bilgilere göre açığı istismar edebilir ve dosya okuma/yazma, LFI/RFI ve yetki yükseltmesi gibi işlemler yapabiliriz.

Nasıl Korunuruz?

• Kullanıcıdan alınan değerleri doğrudan render etmek yerine önceden hazırlanmış HTML şablonlarının render edilmesi önerilmektedir.

Kaynaklar
https://tr.wikipedia.org/wiki/Model-View-Controller
MVC Nedir? Gerçek Örneklerle MVC Nedir Anlayalım
https://canyoupwn.me/tr-server-side-template-injection/ https://www.netsparker.com.tr/blog/web-guvenligi/server-side-template-injection-zafiyeti/ https://gaissecurity.com/yazi/server-side-template-injection-nedir

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar