Jeecg-commonController文件上传漏洞分析

朋友整了一个漏洞情报的钉钉机器人,这几天看到了一个最新推送的漏洞Jeecg commonController 文件上传漏洞。说是EXP已公开、但是网上找了一圈没找到,那就自己分析一下吧!

0x01 前言

朋友整了一个漏洞情报的钉钉机器人,这几天看到了一个最新推送的漏洞Jeecg commonController 文件上传漏洞。说是EXP已公开、但是网上找了一圈没找到,那就自己分析一下吧!

image-20240326014820233

0x02 漏洞简介

JEECG(J2EE Code Generation) 是开源的代码生成平台,目前官方已停止维护。由于 /api 接口鉴权时未过滤路径遍历,攻击者可构造包含 ../ 的url绕过鉴权。攻击者可构造恶意请求利用 commonController 接口进行文件上传攻击实现远程代码执行。

0x03 环境搭建

1)基础环境

idea、java7、tomcat7

mysql5.7

jeecg3.8:https://github.com/chen-tj/jeecg3.8

2)使用IDEA集成Tomcat7插件运行项目

  1. <plugin>
  2. <groupId>org.apache.tomcat.maven</groupId>
  3. <artifactId>tomcat7-maven-plugin</artifactId>
  4. <version>2.2</version>
  5. <configuration>
  6. <port>8080</port>
  7. <path>/demo</path>
  8. <uriEncoding>UTF-8</uriEncoding>
  9. <!--添加忽略war包检查标签,则可以让tomcat7:run指令正常启动tomcat-->
  10. <ignorePackaging>true</ignorePackaging>
  11. <contextFile>src/main/webapp/WEB-INF/context.xml</contextFile>
  12. <contextReloadable>true</contextReloadable>
  13. </configuration>
  14. </plugin>

image-20240325233557207

3)使用idea加载环境时可能会出现一些问题,可以参考:

https://blog.csdn.net/weixin_43761325/article/details/105233037

4)访问到如下页面就ok

image-20240325233718673

0x04 路由说明

JEECG快速开发平台基于spring MVC 框架
@Controller将一个类声明为控制器类,再通过@RequestMapping配置路由映射。

简单举例说明:
项目中src/main/java/com/jeecg/demo/controller/MultiUploadController.java文件

  1. @RequestMapping("/multiUploadController")
  2. @RequestMapping(params = "list")

对应的url地址为:http://localhost:8080/multiUploadController.do?list

0x05 漏洞复现

image-20240326012438041

image-20240326012503300

image-20240326012523537

0x06 漏洞分析

在漏洞描述中说是在commonController 接口进行文件上传

全局搜索commonController,最终定位到org.jeecgframework.web.system.controller.core.CommonController

image-20240326011548536

在一番仔细的寻找之后,发现commonController#parserXml这个可疑的方法

很明显可以看出来其对上传文件后缀未做任何过滤

image-20240326012639532

根据0x03中对路由的分析,可以构造出,这个漏洞的路径

  1. http://127.0.0.1/demo/commonController.do?parserXml

直接发包访问该接口会鉴权被检测到没有登录,直接302跳转,要想办法绕过
image-20240326013625165

结合漏洞简介中提到的 /api 接口鉴权时未过滤路径遍历,攻击者可构造包含 ../ 的url绕过鉴权

找到了org.jeecgframework.core.interceptors.AuthInterceptor#preHandle,提到包含api/的路径不做登录验证

image-20240326014019009

查看引用的Maven依赖中的alwaysUseFullPath为值默认false,这样的话程序在处理发包中会对uri进行标准化处理。于是我们就可以使用/api/../的方式来进行bypass

image-20240326014429364

所以最终的漏洞地址就是:

  1. http://127.0.0.1/demo/api/../commonController.do?parserXml

0x07 总结

文件上传漏洞,结合未授权

0x08 参考

https://avd.aliyun.com/detail?id=AVD-2024-1705554

https://www.cnblogs.com/yyhuni/p/14607471.html

https://www.hetianlab.com/specialized/20240311223801

  • 发表于 2024-04-01 10:00:02
  • 阅读 ( 17865 )
  • 分类:漏洞分析

0 条评论

Yu9
Yu9

9 篇文章

站长统计