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

Ethan医生6天前WEB安全20

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&无回显带外&SSRF元数据&DTD实体&OOB盲注&文件拓展&复盘

XML&XXE&无回显带外&SSRF元数据&DTD实体&OOB盲注&文件拓展&复盘

#详细点:XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。等同于JSON...

SSRF服务端伪造&伪协议利玩法&域名及IP绕过&无回显利用&挖掘点&SRC复盘

SSRF服务端伪造&伪协议利玩法&域名及IP绕过&无回显利用&挖掘点&SRC复盘

#SSRF漏洞原理服务器端请求伪造,也称为SSRF(Server-Side Request Forgery),是因为前端用户可以输入任意URL到后端服务器,而且服务器也没有对其URL进行严格的过滤和校...

PHP反序列化&原生内置&Exception类&SoapClient类&SimpleXMLElement

#原生自带类参考https://xz.aliyun.com/news/8792https://www.anquanke.com/post/id/264823https://blog.csdn.net/...

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

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

PHP框架开发篇&实战ThinkPHP项目&打击微交易&源码获取&扩大战果

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

CSRF跨站请求伪造&Referer同源&Token校验&复用删除置空&联动上传或XSS

CSRF跨站请求伪造&Referer同源&Token校验&复用删除置空&联动上传或XSS

补充:XSS漏洞与CSRF区分主要区别目标:XSS攻击用户,CSRF攻击应用。执行位置:XSS在用户浏览器执行,CSRF在用户不知情时执行请求。防御措施:XSS防御侧重于输入过滤和输出编码,CSRF防...

发表评论    

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