Template Engine là công cụ hỗ trợ xây dựng trang html bằng cách sử dụng các file template tĩnh, trong đó các biến hoặc placeholder sẽ được thay thế bằng dữ liệu thực tại runtime. Cách thức hoạt động cơ bản của ngôn ngữ template bao gồm back-end rendering và front-end rendering:
Một số template phổ biến:
vd:
$output = $twig->render("Dear {first_name},", array("first_name" => "Carlos"));
Template Injection là lỗ hổng bảo mật cho phép user chèn mã template vào một template có sẵn, khiến template engine thực thi mã đó
Lổ hổng phát sinh khi dữ liệu đầu vào được concatenate trực tiếp vào các template thay vì được truyền vào dưới dạng dữ liệu
Cũng với vd trên, nếu như truyền vào template input trực tiếp từ người dùng thay vì dữ liệu tĩnh, có thể dẫn đến SSTI:
$output = $twig->render("Dear " . $_GET['name']);
<http://website.com/?name={{7*7}>}
-> Dear 49
Quá trình khai thác lỗ hổng:

Detect
Đây là bước xác định có xảy ra lỗ hổng hay không , ở vị trí nào.
Có thể sử dụng những phép tính đơn giản như {{7*7}}, tùy vào template. Nếu kết quả trả về chuỗi lạ hoặc kết quả phép tính, có thể xác định tồn tại lỗ hổng.
Chuỗi ${{<%[%'"}}%\\. chứa các toán tử của hầu hết các Template phổ biến, các dấu hiệu SSTI có thể là
${7*7} trả về 49);data.username}}hello trả về adminhello).Identify
Sau khi xác định có lỗ hổng SSTI, cần nhận dạng template sử dụng để tấn công.
https://github.com/Hackmanit/template-injection-table
Bảng tương tác chứa các polyglot template injection
Exploit
Khi đã xác định template được sử dụng, cần xây dựng các payload để tìm kiếm các thông tin quan trọng.
Quá trình khai thác thường gồm 3 giai đoạn: Read , Explore ,Attack
Read (Nghiên cứu tài liệu)
Tìm hiểu tài liệu của template engine Qua đó nắm vững cú pháp cơ bản như việc cách engine xử lí biến và khối lệnh.
Cũng có thể tham khảo các payload đã được xây dựng sẵn.
Explore
Tiến hành thăm dò môi trường thực thi để lập bản đồ các đối tượng có thể truy cập như built-in objects hoặc developer-supplied objects
Attack
Một số ví dụ và flow attack: