网络安全专业术语
SSTI
Server-Side Template Injection
SSTI · 在模板里注入代码
攻击/渗透应用安全
SSTI
- 定义
- SSTI(Server-Side Template Injection)是网络安全领域的专业术语。SSTI 通过向服务端模板引擎(Jinja2、Twig 等)注入恶意表达式,可能实现远程代码执行。
最后更新:2026-03-18
什么是SSTI?
SSTI 通过向服务端模板引擎(Jinja2、Twig 等)注入恶意表达式,可能实现远程代码执行。当用户输入被直接拼接到模板中时就会产生此漏洞。
- 利用模板引擎执行恶意代码
- Jinja2、Twig、Freemarker 是常见目标
- 可从信息泄露升级到 RCE
SSTI详解
SSTI 的检测方法是注入数学表达式(如 {{7*7}}),如果返回 49 则存在漏洞。不同模板引擎的利用方式不同,Jinja2 可通过 __class__.__mro__ 链访问 os 模块执行命令。防御方式:使用沙箱模式、避免将用户输入直接拼接到模板、使用逻辑无关的模板引擎。
SSTI的应用场景
正式定义
利用服务端模板引擎注入恶意表达式的代码注入攻击
应用场景
- Web 应用的模板注入检测
- 渗透测试中的 RCE 利用链
- 模板引擎的安全配置审计
常见误区
- SSTI 不只是 XSS,它在服务端执行,危害更大
- 不同模板引擎的利用方式完全不同
- 沙箱模式不是万能的,很多沙箱可以被绕过
实际案例
📌 Jinja2 SSTI
攻击者注入 {{config.__class__.__init__.__globals__['os'].popen('id').read()}} 在 Jinja2 模板中执行系统命令。
SSTI的参考来源
关于SSTI的常见问题
- SSTI 能造成什么危害
- 通常可以直接实现 RCE,因为模板引擎往往能访问底层语言的对象和方法,危害等级很高。
- 怎么检测 SSTI
- 在输入中注入模板表达式(如 {{7*7}}),如果返回 49 说明存在 SSTI,不同模板引擎语法不同。