java审计-SSTI

本文介绍了服务器端模板注入(SSTI)漏洞,通过Thymeleaf示例展示了如何利用可控模板参数执行恶意代码。同时,文中提供了安全代码示例,强调了白名单策略在防止RCE攻击中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

  • SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容。

漏洞代码

 @GetMapping("/thymeleaf/vul")
 public String thymeleafVul(@RequestParam String lang) {
     // 模版文件参数可控
     return "lang/" + lang;
 }
 /**
   * 如果controller无返回值,则以GetMapping的路由为视图名称,即将请求的url作为视图名称,调用模板引擎去解析
   * 在这种情况下,我们只要可以控制请求的controller的参数,一样可以造成RCE漏洞
   * payload: __${T(java.lang.Runtime).getRuntime().exec("open -a Calculator")}__::.x
   */

 @GetMapping("/doc/{document}")
 public void getDocument(@PathVariable String document) {
     System.out.println(document);
 }

安全代码

 public String thymeleafSafe(@RequestParam String lang) {
     List<String> white_list = new ArrayList<String>();
     white_list.add("en");
     white_list.add("zh");

     if (white_list.contains(lang)){
         return "lang/" + lang;
     } else{
         return "commons/401";
     }
 }
 // 由于controller的参数被设置为HttpServletResponse,Spring认为它已经处理了HTTP Response,因此不会发生视图名称解析

 @GetMapping("/doc/safe/{document}")
 public void getDocument(@PathVariable String document, HttpServletResponse response) {
     System.out.println(document);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值