首页/安全/渗透测试与安全评估速查/服务端模板注入(SSTI)验证
常见漏洞验证121 条

服务端模板注入(SSTI)验证

用户输入被拼进服务端模板并参与编译时形成 SSTI;验证用无害算式标记判断“输入是否被当作模板表达式求值”。

SSTI 是什么

服务端模板注入(SSTI)出现在用户输入被拼进服务端模板并参与编译的场合:模板引擎会把输入当成模板语法解析,而不仅是当成文本渲染。验证思路是用一个无害的算式标记判断输入是否被当作表达式求值——原样输出说明输入只被当文本,输出计算结果则说明进入了模板编译流程。

基本信息

常见入口邮件模板、页面组件、报表、可自定义文案处
判定信号提交的算式标记被求值并渲染出结果
误报来源前端模板语法:由浏览器渲染,与服务端无关
验证边界确认表达式被求值即停止,不访问系统对象
记录要求页面、参数、模板引擎特征与验证时间

典型使用场景

  • 通知与邮件模板中的自定义文案字段
  • 报表与导出模块的可配置标题、页脚
  • 多语言文案与页面组件中的可编辑内容
  • 自定义页面、公告与签名档等富文本入口
  • 模板文件可上传或可选择的配置项

验证标记用法

验证标记用法
# 在可控输入处提交一个无害的算式标记(两个相同整数相乘)
# 观察响应差异:
#   原样输出标记      → 输入未参与模板编译,非 SSTI
#   渲染出乘积结果    → 疑似 SSTI,记录上下文
# 记录:页面路径、参数名、标记写法、响应片段、模板特征
# 判定成立后立即停止,不做系统对象访问与命令类尝试

响应差异读法

响应表现含义后续动作
标记原样输出输入被当纯文本标注未复现,换入口继续排查
输出计算结果输入参与模板编译记录证据并停止,建议优先修复
返回模板语法错误模板引擎解析了输入但语法不完整属于强信号,需结合上下文复核
前端渲染后才出现结果前端模板行为,非服务端问题标注为误报并说明判定依据
验证到表达式被求值即停止:不要尝试访问系统对象、读取文件或执行命令类表达式,这已经超出验证范围。
不同模板引擎的语法标记各不相同,单一标记无结果不能直接判定不存在,需结合引擎类型选择对应标记。

易错点

  • 把前端框架的挂载语法误报为服务端模板注入,未区分渲染位置
  • 不同模板引擎语法不同,只用一种标记导致漏判
  • 为证明危害尝试访问系统对象,越过验证边界
  • 模板语法错误响应未做对照请求,把偶发报错当注入证据

数据来源与参考

  • PortSwigger Web Security Academy(SSTI)
  • OWASP WSTG(Template Injection)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌