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

Ethan医生5个月前WEB安全137

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

发表评论    

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