📌 SSTI Nedir?

  • Web uygulamaları genellikle template engine (şablon motoru) kullanır.
  • Bu motorlar, HTML sayfalarını dinamik hale getirmek için kullanıcı verilerini şablonlara yerleştirir.
  • Eğer kullanıcıdan gelen veri doğrudan ve kontrolsüz şekilde şablona eklenirse, saldırgan kendi kodunu çalıştırabilir.
  • İşte bu duruma Server-Side Template Injection (SSTI) denir

Uygulamanın İncelenmesi

Kaynak kod incelendiğinde kritik bölüm şu şekildedir:

require '../../../public/vendor/autoload.php';
$loader = new Twig_Loader_String();
$twig = new Twig\Environment($loader);
$userInput = strip_tags($_POST["content"]);
$escapedInput = $twig->render($userInput);

Bu kod parçası birkaç önemli noktayı açıkça göstermektedir:

  • Twig template engine kullanılıyor.
  • Twig_Loader_String ile kullanıcı girdisi doğrudan template olarak render ediliyor.
  • strip_tags() sadece HTML taglerini temizler, Twig syntax'ını engellemez.
  • Herhangi bir sandbox, whitelist veya context kısıtlaması uygulanmamış.

Bu durum, klasik bir SSTI zafiyetidir.

SSTI Tespiti

İlk adımda, kullanıcı girdisinin gerçekten server-side çalıştırılıp çalıştırılmadığı test edilir.

Test Payload

{{ 7*7 }}

Sonuç

Sayfa çıktısında:

None
49

değerinin görülmesi, girdinin sunucu tarafında template olarak işlendiğini doğrular. Bu noktada SSTI açığının varlığı kesinleşmiştir.

Template Engine Davranışının Analizi

Bir sonraki adımda Twig ortamının yetenekleri analiz edilmiştir.

Debug Fonksiyon Testi

{{ dump() }}

Sonuç:

None
ERROR: Unknown "dump" function

Bu çıktı, Twig debug modunun kapalı olduğunu gösterir. Ancak bu durum SSTI'nin varlığını ortadan kaldırmaz; yalnızca kolay bilgi sızdırma fonksiyonlarının devre dışı olduğunu gösterir.

Context ve Kısıtlamalar

_context ve for döngüleri üzerinden yapılan denemelerde context'in bilinçli olarak daraltıldığı görülmüştür. Bu da labın amacının ileri seviye exploit değil, SSTI tespiti olduğunu göstermektedir.

Etkiyi Kanıtlama (Impact Demonstration)

Bir SSTI açığını raporlamak için yalnızca matematiksel işlem yeterli değildir. Açığın gerçekten server-side çalıştığını ve uygulama ortamına erişim sağladığını göstermek gerekir.

Bu amaçla PHP runtime bilgilerine erişim test edilmiştir.

PHP Versiyon Bilgisi

{{ constant('PHP_VERSION') }}

Çıktı:

None
7.4.3-4ubuntu2.28

İşletim Sistemi Bilgisi

{{ constant('PHP_OS') }}

Çıktı:

None
Linux

Bu sonuçlar şunu net şekilde kanıtlar:

  • Kullanıcı girdisi istemci tarafında değil, sunucu tarafında çalışmaktadır.
  • Twig template engine, PHP runtime'a erişebilmektedir.
  • Bu, SSTI açığının bilgi sızdırma etkisine sahip olduğunu gösterir.