朋友整了一个漏洞情报的钉钉机器人,这几天看到了一个最新推送的漏洞Jeecg commonController 文件上传漏洞
。说是EXP已公开、但是网上找了一圈没找到,那就自己分析一下吧!
JEECG(J2EE Code Generation) 是开源的代码生成平台,目前官方已停止维护。由于 /api 接口鉴权时未过滤路径遍历,攻击者可构造包含 ../ 的url绕过鉴权。攻击者可构造恶意请求利用 commonController 接口进行文件上传攻击实现远程代码执行。
1)基础环境
idea、java7、tomcat7
mysql5.7
jeecg3.8:https://github.com/chen-tj/jeecg3.8
2)使用IDEA集成Tomcat7插件运行项目
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/demo</path>
<uriEncoding>UTF-8</uriEncoding>
<!--添加忽略war包检查标签,则可以让tomcat7:run指令正常启动tomcat-->
<ignorePackaging>true</ignorePackaging>
<contextFile>src/main/webapp/WEB-INF/context.xml</contextFile>
<contextReloadable>true</contextReloadable>
</configuration>
</plugin>
3)使用idea加载环境时可能会出现一些问题,可以参考:
https://blog.csdn.net/weixin_43761325/article/details/105233037
4)访问到如下页面就ok
JEECG快速开发平台基于spring MVC 框架
@Controller将一个类声明为控制器类,再通过@RequestMapping配置路由映射。
简单举例说明:
项目中src/main/java/com/jeecg/demo/controller/MultiUploadController.java文件
@RequestMapping("/multiUploadController")
@RequestMapping(params = "list")
对应的url地址为:http://localhost:8080/multiUploadController.do?list
在漏洞描述中说是在commonController 接口进行文件上传
全局搜索commonController,最终定位到org.jeecgframework.web.system.controller.core.CommonController
在一番仔细的寻找之后,发现commonController#parserXml
这个可疑的方法
很明显可以看出来其对上传文件后缀未做任何过滤
根据0x03中对路由的分析,可以构造出,这个漏洞的路径
http://127.0.0.1/demo/commonController.do?parserXml
直接发包访问该接口会鉴权被检测到没有登录,直接302跳转,要想办法绕过
结合漏洞简介中提到的 /api 接口鉴权时未过滤路径遍历,攻击者可构造包含 ../ 的url绕过鉴权
。
找到了org.jeecgframework.core.interceptors.AuthInterceptor#preHandle
,提到包含api/
的路径不做登录验证
查看引用的Maven依赖
中的alwaysUseFullPath
为值默认false
,这样的话程序在处理发包中会对uri
进行标准化处理。于是我们就可以使用/api/../
的方式来进行bypass
所以最终的漏洞地址就是:
http://127.0.0.1/demo/api/../commonController.do?parserXml
文件上传漏洞,结合未授权
https://avd.aliyun.com/detail?id=AVD-2024-1705554
9 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!