Server Side Template Injection Nedir?

Yayınlayan
Editör
Yayınlanma tarihi
26-02-2022
Okuma süresi
10 DK

Server Side Template Injection Nedir?

 

Eski zamanlarda bir web sitesi yazıldığı zaman frontend ve backend kısımlarının hepsi bir arada yazılır belirli bir düzen olmazdı. Ancak günümüzde web kavramı artık sadece web siteleri için değil web uygulamaları içinde geçerli oldu.

Web uygulamalarının gelmesiyle beraber hayatımıza MVC gibi yazılım mimarileri de girdi.Bu mimarinin hayatımıza girmesinin nedenleri ise yazdığımız kodların daha okunabilirliği, backend ve frontend kısımlarının ayrı olması gibi etkenler oldu.

Model :

Model, verilerin şeklini ve iş mantığını temsil eder. Uygulamanın verilerini tutar. Model nesneleri, model durumunu bir veritabanında alır ve saklar.

View :

View bir kullanıcı arayüzüdür. Kullanıcıya model kullanarak ekran verilerini görüntülemeyi ve ayrıca verileri değiştirmelerini sağlar.

Controller :

Controller kullanıcı isteğini yerine getirir. Genelde, kullanıcı sırayla uygun URL isteğini yükselten View ile etkileşime girer, bu istek bir controller tarafından gerçekleştirilir. Controller, model verisiyle uygun görünümü bir cevap olarak verir.

Aşağıdaki şekil Model, View ve Controller arasındaki etkileşimi göstermektedir.

 Server-Side-Template-Injection-1

Somut bir örnek verecek olursak;

  • Kullanıcı http://example.com/blog adresine Controller katmanının karşılaması sayesinde bir istekte bulunuyor.
  • İstenilen blog yazıları vs içeriklerin hepsi veritabanında tutulduğundan Controller katmanı Model katmanına içerikleri toparlayıp kendisine vermesini istiyor.
  • Controller katmanı gelen içerik yığınını (model object) düzenleyip, View katmanının zorlamadan işleyebileceği hale (data array) sokuyor ve kullanıcıya iletmesi için View katmanına veriyor.
  • View katmanı gelen yazı dizisini bir döngü içerisinde HTML template’indeki uygun yerlere basıyor.

MVC Mimarisini kabaca öğrendiğimize göre şimdi ana konumuza gelebiliriz.

Template Engine:

Türkçesi Şema Motorları olan Template Engines web uygulamalarında dinamik verileri sunmak için kullanılan yaygın yöntemlerdendir. Modern web ile MVC Mimarisinde View katmanında yer almaktadır. Controller katmanından gelen veriyi işleyip HTML formatında kullanıcıya iletiyor.

PHP dili yazılmış bazı yaygın kullanılan template engineler bulunmaktadır. Twig, Smarty, Blade vb.

Biz zafiyetimizi incelerken Twig Template Engine’i üzerinden ilerleyeceğiz.

Template Injection:

Bir web sitesinde veya web uygulamasında bulunan şablonlara girdi ile geliştiricinin bilgi dahilinde oraya zarar vermek, XSS(Cross-Site Scripting) eklemek ve çalıştırmak kolaydır. Hatta sonrasında Template Injection ile bu zafiyeti sömürüp  sunucu tarafına doğru saldırı için kullanılabilir. Böylelikle RCE(Remote Code Execution) zafiyeti elde edilebilir. XSS gibi bir girdiden RCE zafiyetine geçmek, hem geliştiricinin hatası hem de CMS(Content Management System) tarafından işlevsellik sunmak için template engine kullanılmasından dolayıdır.

Zafiyetin Belirlenmesi:

Template Injection’ı belirlemek aslında zafiyeti uygulamaktan çok daha kolay olur. Eğer ki kullanıcı taraflı yapmış olduğumuz bir girdi, sunucu taraflı bir değişken ile birleşip template üzerine işleniyor ise orada Template Injection’a karşı güvenlik zafiyeti bulunduğunu gösterir. Örneğin aşağıdaki iki girişin çıktısını inceleyelim.

Giriş: custom_email = 25
Çıktı: 25

Giriş: custom_email =
Çıktı : _TwigTemplate_7ae62e582f8a35e5ea6cc639800ecf15b96c0d6f78db3538221c1145580ca4a5 sınıfının nesnesi dizeye dönüştürülemedi

Burada gördüğümüz gibi ilk girdimiz olması gerektiği gibi, ikincisi ise bir hata yanıtı döndürmüş. Saldırgan uyguladığı web platformunda hangi template engine’in kullanımda olduğuna ya da orada bir template injection zafiyetinin bulunup bulunmadığına bakmak için bilerek hata yanıtları bastırabilir. Fakat bu şablon dillerinde kullanılan sözdiziminin HTML karakterleriyle çakışmaması gerekir. Bu nedenle dillerin çoğu aynı temel sözdizimi özelliklerini paylaşır. Böyle olduğu için ise saldırgan tek bir HTTP isteğinin içerisine yazmış olduğu payloadlar ile veya aynı anda birden fazla template engine’i arayarak kullanabiliriz.

Aşağıdaki resimde gösterildiği gibi bir akış şeması kullanarak, hangi sunucuda şablonların kullanımda olduğunu ve hangilerinin savunmasız olup olmadığını belirleyebiliriz. Fakat şemada sadece en çok kullanılan 4 template engine bulunmaktadır. Eğer ki çıktı “Pass” ise şablon savunmasızdır.

Server-Side-Template-Injection-2

Template Injection Zafiyetinin Çalıştırılması:

 Server Side Template Injection zafiyetini buraya kadar anlattık ve mantığını az çok kavradık. Şimdi ise uygulamalı olarak nasıl zafiyetten yararlanabiliriz onu göreceğiz. Uygulamamızı XVWA üzerinden yapacağız.

Server-Side-Template-Injection-3

XVWA sayfamızdan SSTI(Server Side Template Injection) kısmına geldikten sonra, burada öncelikle bir XSS denemesi yapıyoruz. Çünkü biliyoruz ki XSS çalışan bir şablonda, Template Injection bulunabilir.

Server-Side-Template-Injection-4

Gördüğümüz gibi XSS(Cross-Site Scripting) gayet başarılı bir şekilde çalıştı. Artık Template Injection için payload’larımızı deneyebiliriz.

İlk olarak basit bir matematik işlemini yaptırabiliyor muyuz diye bakıyoruz.

Server-Side-Template-Injection-5

Gördüğümüz gibi başarılı bir şekilde yaptırabildik. Buradan sonrasında basit Template kodlarımızı deneyerek sunucu taraflı payloadlarımızı çalıştırabiliriz. Örneğin sunucuda şuan ki kullanıcımızın kim olduğuna bakalım.

Server-Side-Template-Injection-6

Burada bir parantez açıp şuan da deneme yaptığımız Template Engine’in Twig olduğunun dikkatini çekmek istiyorum. Bu yüzden Twig’in kendi içerisindeki metotlarına göz atmamız gerekiyor. Twig’deki bilmemiz gereken başlıca metotlar şunlardır;

  • getFilter(“filter”); Bu metot kendisine parametre olarak verilen Twig filtresini getirir.
  • registerUndefinedFilterCallback(“function_name”); Bu metot eğer getFilter metotu çağrılmış ise getFilter’in callback’i olarak kendisine parametre olarak verilen değer ismindeki global bir fonksiyonu çağırır. Bu metotu PHP’deki call_user_func metotu gibi düşünebiliriz.
  • setCache(“ftp://example.com:21”); Bu metot kendisine parametre olarak verilen değerdeki şablonu önbelleğe alır.
  • loadTemplate(“backdoor”); Bu metot kendisine parametre olarak verilen değer ismindeki şablonu yükler.

Twig içerisinde kullanabileceğimiz başlıca metotlar yukarıdaki gibidir. Bu metotlar Twig’in kendi metotları olduğundan _self.env prefix’i ile çağırmamız gerekiyor.

Bizde burada aşağıdaki kodu kullanacağız.

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}

 Gördüğümüz gibi artık sunucu taraflı kod çalıştırabiliyoruz ki şu anda hangi kullanıcı da olduğumuzu görüntüleyebildik. Buradan sonra whoami komutu yerini basit bir şekilde bir shell scripti ekleyip kendi bilgisayarımızda dinlediğimiz zaman karşı tarafın sunucusunu ele geçirebiliriz.

Template Injection Zafiyetinden Korunma Yolları:

Normal bir Twig, Template Engine’in de Template Injection zafiyeti barındıran kod şu şekildedir.

<?php

include 'vendor/twig/twig/lib/Twig/Autoloader.php';

 

$name = $_GET['name'];

 

Twig_Autoloader::register();

$loader = new Twig_Loader_String();

$twig = new Twig_Environment($loader);

$result = $twig->render($name);

 

echo $result;

Burada Template Injection olmasına neden olan şey ise kullanıcıda alınan değerin otomatik olarak yani doğrudan çalıştırılmasıdır. Zafiyeti engelleyebilmemiz için bu durumun önüne geçmemiz gerekir.Bu yüzden öncelikle hazırlamış olduğumuz bir HTML şablonunu bu kod içerisine include edip çalıştırmalıyız.

Daha detayı açıklamak gerekirse test. twig adında bir HTML şablon dosyası oluşturalım ve içerisine;

{{ name }} yazalım.

Daha sonradan kodumuzun içerine ekleyelim.

<?php

include 'vendor/twig/twig/lib/Twig/Autoloader.php';

 

$name = $_GET['name'];

 

Twig_Autoloader::register();

$loader = new Twig_Loader_String();

$twig = new Twig_Environment($loader);

$result = $twig->render(‘test.twig’, [

‘name’ => $name,

]);

echo $result;

Böylelikle zafiyet barındıran kodumuzu yukarıdaki gibi düzenlediğimiz zaman artık kodumuz saldırganlara karşı güvenli bir hal almış oluyor.

Yazımı okuduğunuz için teşekkür ederim.

Diğer Blog Yazıları_

Sosyal Medya Kullanımının Riskleri
Sosyal Medya Kullanımının Riskleri
Infraskope Server ve Özellikleri
Infraskope Server ve Özellikleri
Kritik Sunucular Üzerindeki Aktivitelerin Loglanması
Kritik Sunucular Üzerindeki Aktivitelerin Loglanması
Kurumlarda Ağ Güvenlik Stratejileri
Kurumlarda Ağ Güvenlik Stratejileri
WPA-WPA2 Güvenlik Standartlarına Yönelik Saldırı: KRACK (KEY-REINSTALLATION-ATTACK)
WPA-WPA2 Güvenlik Standartlarına Yönelik Saldırı: KRACK (KEY-REINSTALLATION-ATTACK)
Log Yönetiminde Ajanlı/Ajansız Çözümler
Log Yönetiminde Ajanlı/Ajansız Çözümler
Herkesin aklındaki soru: Yapay Zeka Nedir?
Herkesin aklındaki soru: Yapay Zeka Nedir?
Discovery of DLL Hijack on Trend Micro AntiVirus+ | CVE-2018-18333
Discovery of DLL Hijack on Trend Micro AntiVirus+ | CVE-2018-18333
Web Cache Poisoning
Web Cache Poisoning
XML EXTERNAL ENTITY INJECTION AND OOB (OUT-OF-BAND) DATA RETRIEVAL
XML EXTERNAL ENTITY INJECTION AND OOB (OUT-OF-BAND) DATA RETRIEVAL
ARP Poisoning
ARP Poisoning
Cross-Site Request Forgery (CSRF) Zafiyeti
Cross-Site Request Forgery (CSRF) Zafiyeti
SSRF (Server Side Request Forgery)
SSRF (Server Side Request Forgery)
BlueBorne
BlueBorne
Server Side Template Injection Nedir?
Server Side Template Injection Nedir?
Linux Restricted Shell Atlatma Teknikleri
Linux Restricted Shell Atlatma Teknikleri
Discovery of Sandbox Escape on Comodo Container(Antivirus&amp;Firewall)
Discovery of Sandbox Escape on Comodo Container(Antivirus&Firewall)
SDR-Sharp Kullanımı
SDR-Sharp Kullanımı
Log Yönetimi | Log Management | Veritabanı Log | Siem
Log Yönetimi | Log Management | Veritabanı Log | Siem
Cyber Kill Chain, Bir Siber Saldırının Yaşam Döngüsü
Cyber Kill Chain, Bir Siber Saldırının Yaşam Döngüsü
Phishing Nedir?
Phishing Nedir?
“GOLD” Affix Phishing Attack
“GOLD” Affix Phishing Attack
Sızma Testi ve Ödül Avcılığı Hizmetleri
Sızma Testi ve Ödül Avcılığı Hizmetleri
Güvenilir Olarak CAPTCHA Yapılandırılması
Güvenilir Olarak CAPTCHA Yapılandırılması
Basit Kriptolojiden Günümüze Evrilişi
Basit Kriptolojiden Günümüze Evrilişi
Dosya Sistem Analizinin Önemi
Dosya Sistem Analizinin Önemi
HTTP Request Smuggling (HTTP İstek Kaçakcılığı) Nedir?
HTTP Request Smuggling (HTTP İstek Kaçakcılığı) Nedir?
KVKK Kapsamında Veri Keşfi Maskeleme ve Şifreleme
KVKK Kapsamında Veri Keşfi Maskeleme ve Şifreleme
Sosyal Medya Kullanımının Riskleri
Sosyal Medya Kullanımının Riskleri
Sızma (Penetrasyon) Testi Nedir?
Sızma (Penetrasyon) Testi Nedir?
Start Up Kültürü
Start Up Kültürü
Sigma Kuralları ile SIEM Ürünlerinde Tehdit Avı
Sigma Kuralları ile SIEM Ürünlerinde Tehdit Avı
Kritik Altyapılar ve SCADA Güvenliği
Kritik Altyapılar ve SCADA Güvenliği
Zararlı Yazılım Analiz Teknikleri
Zararlı Yazılım Analiz Teknikleri
Uzaktan Çalışma Modellerinde Siber Güvenlik Riskleri
Uzaktan Çalışma Modellerinde Siber Güvenlik Riskleri
Pandemi Sürecinde Siber Güvenlik Riskleri
Pandemi Sürecinde Siber Güvenlik Riskleri
SOC Nedir ve SOC Merkezleri Nasıl Çalışır?
SOC Nedir ve SOC Merkezleri Nasıl Çalışır?
PHISHING Hakkında Her şey
PHISHING Hakkında Her şey
Sosyal Mühendislik Nedir?
Sosyal Mühendislik Nedir?
Siber Hijyen
Siber Hijyen
Adli Bilişim (Digital Forensic) Nedir?
Adli Bilişim (Digital Forensic) Nedir?
DHCP Spoofing Saldırısı Nedir, Nasıl Yapılır?
DHCP Spoofing Saldırısı Nedir, Nasıl Yapılır?
FAIL2BAN İLE SSH BRUTE FORCE SALDIRILARINI ÖNLEME
FAIL2BAN İLE SSH BRUTE FORCE SALDIRILARINI ÖNLEME
BULK EXTRACTOR ARACIYLA DİSK İNCELEME
BULK EXTRACTOR ARACIYLA DİSK İNCELEME
SolarWinds Vaka Analizi
SolarWinds Vaka Analizi
Frida ile SSL Pinning Bypass
Frida ile SSL Pinning Bypass
COOKİE Nedir? Nasıl Çalışır?
COOKİE Nedir? Nasıl Çalışır?
Bilgi Güvenliği Test ve Değerlendirmeleri Teknik Kılavuzu
Bilgi Güvenliği Test ve Değerlendirmeleri Teknik Kılavuzu
Dridex Bankacılık Trojanı Teknik Analiz Raporu (TR)
Dridex Bankacılık Trojanı Teknik Analiz Raporu (TR)
Adwind Rat Technical Analysis Report (ENG)
Adwind Rat Technical Analysis Report (ENG)
SOC Nedir, Firmalar İçin Neden Önemlidir?
SOC Nedir, Firmalar İçin Neden Önemlidir?
Blockchain Nedir?
Blockchain Nedir?
İşlemcilerin Koruma Mekanizması ve Koruma Mekanizmasının Atlatılması
İşlemcilerin Koruma Mekanizması ve Koruma Mekanizmasının Atlatılması
Active Directory Güvenlik İpuçları
Active Directory Güvenlik İpuçları
Nisan 2022 Siber Güvenlik Bülteni
Nisan 2022 Siber Güvenlik Bülteni
Mavi Takım Üyeleri İçin Windows Core Process
Mavi Takım Üyeleri İçin Windows Core Process
Kişiler İçin Bilgi Güvenliği Rehberi
Kişiler İçin Bilgi Güvenliği Rehberi
DDoS Nedir?
DDoS Nedir?
C Dilinde Dosya Yönlendirmeleri (IO Redirection)
C Dilinde Dosya Yönlendirmeleri (IO Redirection)