本次审计源码地址:
https://gitee.com/jeecg/jeecg
该版本已经停止更新,官方已推出新版本。
https://gitee.com/jeecg/jeecg-boot
下载源码后直接在,IDEA 中打开(我用的是 IDEA)。
点击右上角添加运行环境配置
添加新的配置,选择 Tomcat Server -> Local
如果没有配置 Tomcat Server
选择路径添加一个即可
点击 FIx 修复
选择 war exploded
(war exploded 模式是将WEB工程以当前文件夹的位置关系上传到服务器,即直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。)
我这里是用的 mysql
所以选择 jeecg_4.0_mysql.sql
, 添加创建数据库逻辑, 直接导入即可。
就可以跑起来了
用了 Springframework 4.0.9
之前有写过文章测试过,在 Springframework < 4.1.8
之前哪怕手动设置了 MultipartFile
的处理对象 Windows 下也存在目录穿越(绕过)参考: Spring MultipartFile 文件上传的潜在威胁
这里手动设置使用 CommonsMultipartResolver
,但版本 < 4.1.8
Windows 下存在绕过
src/main/resources/spring-mvc.xml
这里配置了两种路由模式,一种是 .do
结尾,一种是 /rest/
开头
src/main/webapp/WEB-INF/web.xml
收集 Filter 信息,这里并没有关于权限认证的 Filter
查看拦截器, 这里设计到三个拦截器,且 mapping 都是 /**
src/main/resources/spring-mvc.xml
只是简单的编码
org.jeecgframework.core.interceptors.EncodingInterceptor#preHandle
这里存在绕过,后面再说。可以参考我之前发布的文章:这个鉴权到底能不能绕
org.jeecgframework.jwt.aop.RestAuthTokenInterceptor#preHandle
这里的 Mapping 也是 /**
但他不过滤URL 存在 rest/
的请求
src/main/resources/spring-mvc.xml
而逻辑内也存在绕过, 可以参考我之前发布的文章:这个鉴权到底能不能绕
org.jeecgframework.core.interceptors.AuthInterceptor#preHandle
综合上面的信息,我们可以使用 /api/../
,绕过 AuthInterceptor
的认证
正常访问,302 跳转到超时页面
超时页面只是通过 JS 跳转而已
通过 /api/../
绕过
RestAuthTokenInterceptor
拦截器中,使用了 JWT Token 进行认证。
org.jeecgframework.jwt.aop.RestAuthTokenInterceptor#preHandle
使用的 JWT 密钥是写死的, 也存在绕过。虽然存了 Redis,但基本信息是固定的,除了时间。也就是说只要他登录了,redis 中又记录可以爆破 Token。
org.jeecgframework.jwt.service.RedisTokenManager#createToken
org.jeecgframework.jwt.def.JwtConstants#JWT_SECRET
修改 Redis 配置,重启重新启动。
src/main/resources/redis.properties
打上断点后,正常登录一次,获得 Token 样本。
去 JWT 官网 解密 ,可以看到对应的值。这里的 iat
是登录时的时间戳, 所以是不确定。
通过正常登录获取到的 Id 是可以正常访问站点的
修改一下时间戳(因为我们无法确定管理员是什么时候登录的)
状态变成了 401,未通过鉴权
因为这里又一个步骤是通过 请求头中的解析出来的Id 字段(也就是用户名) 去查找响应的 Token 和请求头中的 Token 进行对比。响应的我可以通过当前时间往回递减去爆破JWT Toekn
org.jeecgframework.jwt.aop.RestAuthTokenInterceptor#preHandle
org.jeecgframework.jwt.service.RedisTokenManager#checkToken
有很多任意文件上传漏洞,没有任何的过滤/限制。这里随机挑一个来说
iconController?saveOrUpdateIcon
存在任意文件上传漏洞,设置了不重命名与上传。
org.jeecgframework.web.system.controller.core.IconController#saveOrUpdateIcon
上传成功
有几个因为组件试用或修复不当或没修复造成的漏洞
这里其实是俩个漏洞,文件上传和 xxe
漏洞, 该功能点是文件上传后试用 Xstream 文件,会造成反序列化漏洞
org.jeecgframework.web.cgform.controller.build.CgformSqlController#doMigrateIn
这里其实是俩个漏洞,文件上传和 xxe
漏洞, 该功能上传好文件后对文件进行解析
前面说了在 Springframework < 4.1.8
之前哪怕手动设置了 MultipartFile
的处理对象 Windows 下也存在目录穿越(绕过)参考: Spring MultipartFile 文件上传的潜在威胁
org.springframework.web.multipart.commons.CommonsMultipartFile#getOriginalFilename
12 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!