写在前面之前周末忙着强网杯,对这道题只做了一半就搁置下来了,最后卡在绕过最新pebble模板引擎RCE那里,今天抽空来继续进行剩下的分析,正好题目里有几个在现实场景当中能用的trick顺便也分享了
题目环境分析也是挺不错题目直接给了Docker环境便于本地搭建,同时设置了权限需要执行./getflag才能获取获得flag
【Spring 场景下突破 pebble 模板注入限制】FROM openjdk:18-slim-bullseyeRUN mkdir /usr/src/AppWORKDIR /usr/src/app# create userRUN groupadd chalusrRUN useradd -ms /bin/bash -g chalusr chalusrCOPY spoink/target/spoink-0.0.1-SNAPSHOT-spring-boot.jar ./COPY spoink/public ./publicCOPY spoink/templates ./templatesCOPY getflag ./RUN chmod 111 ./getflagUSER chalusrCMD ["JAVA", "-jar", "/usr/src/app/spoink-0.0.1-SNAPSHOT-spring-boot.jar"]
路由只有一个,根据参数x返回指定模板,刚看到这里的时候其实有点懵,毕竟很少见到只给一个路由的代码
@Controllerpublic class HomeController {public HomeController() {}@RequestMapping({"/"})public String getTemplate(@RequestParam("x") Optional<String> template, Model model) {return (String)template.orElse("home.pebble");}}
不过我很快关注到了一个application.properties当中一个很有趣的点,也就是这里没有后缀,因此想到了一个目录穿越的可能
pebble.prefix = templatespebble.suffix =
正文目录穿越为什么我说上面那个点很有趣,其实就是第一个想分享的trick,路径穿越,简单来说pebble当中有两个loader一个是classpathloader,另一个是fileloader,优先会在classpath下尝试加载模板文件,如果寻找不到则使用fileloader尝试加载模板文件,其他调用栈不是很重要这里就不多提了
既然想实现任意文件读那第一个就别想了,我们来看第二个,它在
com.mitchellbosecke.pebble.loader.FileLoader#getFile最终加载模板文件内容
可以很明显看到这里没有做路径限制,导致我们可以进行跨目录读任意文件
文章插图
结果如下
文章插图
RCE攻击路径初步构建因此我们便能成功想到一条能RCE的攻击路径
- 上传带恶意内容的模板文件到目标服务器
- 利用LFI读取这个模板并RCE
怎么办?其实很简单,我们也知道,我们的Spring MVC框架是围绕DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染和 文件上传 等功能,好了我都圈出来重点了
在这过程当中它会检查这是否是一个表单请求
文章插图
正好我们也知道spring默认使用内置的Tomcat引擎,
在处理表单的内容当中这会调用
org.Apache.catalina.connector.Request#getParts 去处理解析内容,而这在之前的文章Tomcat文件上传流量层面系列文章当中也提到过,遗忘的可以去 我的博客 考古
废话不多说,类似php的处理一样,它会先将上传的文件保存到一个临时目录再最终复制到目标文件夹,临时文件夹的获取在哪里,在
org.apache.catalina.connector.Request#parseParts
文章插图
发现是通过
javax.servlet.MultipartConfigElement#getLocation 函数获取到保存到临时路径
不难看到这里是空对吧,也就是默认值(默认的话后面会存到/tmp目录下),顺便多提一下,哪里可以设置这个location呢
推荐阅读
- 军棋的规则和走法 军棋的下法
- 通草鸡汤下奶吗
- 袁泉|袁泉,终于从神坛上 下来了
- 防晒|马化腾的企鹅“瘦身了”,收入下滑,但是员工平均工资8.5万以上
- 登月|中国长征系列火箭创下新纪录:2030年左右载人登月!
- |职场上为什么看似和颜悦色,其实心思已经在暗处下套
- 有品位的女人,有以下几种行为 品味女人
- 乾隆谕旨下的锡伯族西迁史 锡伯族西迁
- 如何下载滴滴出行?网约车司机端下载方法对比,总有一种你可以下载
- 滴滴出行司机端安卓和苹果的都是这样下载的,只是你没找对注册方法。