Spring 框架文件上传getshell思路扩展
1398133550745333 漏洞分析 260浏览 · 2025-03-09 03:35

Spring 框架文件上传getshell思路扩展

前言

文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担

前几天不是审计了一波 bootplus,在https://github.com/JoeyBling/bootplus/issues/24发现可以任意文件上传

前台任意文件上传

看到我们的接口代码

PHP
复制代码
随便上传一个文件,抓一个包看看

我们还是使用

PHP
复制代码
图片加载失败


可以看到了路径

尝试一下目录穿越

可以看到成功穿越了,没有禁用我们的../
图片加载失败


图片加载失败


成功上传了

但是我们知道 spring 的项目是不能解析 jsp 的,那如何 getshell 呢

覆盖模板文件

我们观察依赖

图片加载失败


有我们的模板,大看一下文件有没有模板

图片加载失败


太好啦,可以看见是有模板的

那其实就可以考虑覆盖我们的模板文件

这里需要涉及几个基础的语法

FreeMarker 变量

在 FreeMarker 中,变量使用 ${} 语法来引用

相当于放入我们的表达式的格式

建对象 (?new)

FreeMarker 可以使用 ?new 关键字实例化某些 Java 类

默认情况下,FreeMarker 不能直接访问 Java 类,但某些情况下可以使用 ?new 访问系统类

在 FreeMarker 中,freemarker.template.utility.Execute 类允许执行系统命令

我们以弹计算器为例子

所以我们可以覆盖原模板

payload 如下

然后我们需要触发报错的模板

当然只需要访问不存在的路由就好了

图片加载失败


2 条评论
某人
表情
可输入 255
Str3am
2025-04-16 02:56 0 回复
比较理想化的环境,看了看项目默认是打包为jar包,这里是使用IDEA启动环境,此时修改bootplus-master\src\main\resources\templates\就相当于修改classpath:/templates/。如果是jar包的话就不能动态修改classpath:/templates/里内容,这样的利用条件需要修改为war包部署到tomcat上,那这样的话直接上传jsp文件就可以了
1398133550745333
2025-04-25 00:55 0 回复
感谢师傅,get到师傅的意思了,jar包启动了即使修改模板也不会有效果,因为不会加载