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

Ethan医生10个月前WEB安全325

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

相关文章

PHP反序列化&Phar文件类&CLI框架类&PHPGGC生成器&TP&Yii&Laravel

PHP反序列化&Phar文件类&CLI框架类&PHPGGC生成器&TP&Yii&Laravel

#Phar反序列化解释:从PHP 5.3开始,引入了类似于JAR的一种打包文件机制。它可以把多个文件存放至同一个文件中,无需解压,PHP就可以进行访问并执行内部语句。 原理:PHP文件系统函...

XSS跨站&Cookie盗取&数据包提交&网络钓鱼&BEEF项目&XSS平台&危害利用

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

XSS跨站&浏览器UXSS&突变MXSS&Vue&React框架&JQuery库&写法和版本

分类:1、框架或三方库的XSS2、浏览器或插件的XSS3、客户端预览内核的XSS说明:使用框架开发的或第三方库引用操作的,默认安全写法会自带过滤,所以测试此类的应用需存在漏洞版本或不安全写法导致XSS...

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

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

文件包含&LFI&RFI&伪协议条件&编码算法&无文件利用&JAVA应用&SRC复盘

文件包含&LFI&RFI&伪协议条件&编码算法&无文件利用&JAVA应用&SRC复盘

1、原理程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。在包含文件的过程中,如果文件能进行控制,则存储文件包...

Web攻防-大模型应用&LLM搭建&接入第三方&内容喂养&AI插件&安全WiKI库&技术赋能

Web攻防-大模型应用&LLM搭建&接入第三方&内容喂养&AI插件&安全WiKI库&技术赋能

Web2GPT 介绍Web2GPT 是由长亭科技推出的面向网站管理员的智能 AI 应用,可以将 传统网站 一键包装为 智能 AI 应用。Web2GPT 的读法是 Web...

发表评论    

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