0x01 前言

项目地址: gitee: https://gitee.com/getrebuild/rebuild
github: https://github.com/getrebuild/rebuild.git

下载最新版3.5.4

rebuild是一个开源的企业管理系统,可用于CRM,ERP等企业内部管理平台

用到的一些技术栈

  • springboot
  • thymeleaf
  • mysql
  • fastjson
  • eacache(缓存技术)

0x02 审计

在正式开始挖掘漏洞之前,先熟悉一下系统,目录结构如下

  • api 系统全局配置
  • core 整个系统的核心业务代码
  • utils 工具库
  • web 控制层

源码下载完之后,直接运行,数据库的信息在初始化系统的时候配置

正常安装好之后如下:

比较重要的几个类

RebuildWebInterceptor: 拦截器

ControllerRespBodyAdvice: 对数据封装

然后开始看代码,先从登入功能开始,默认的用户名,密码admin admin

控制层类LoginController

先获取vcode验证码,默认不开启,所以不进入第一个if,接着获取user和password,然后判断user登入次数,超过3次就不行,然后进入checkUser

默认的用户名和密码登入

在第一个检查用户的地方,除了admin用户之外,还有俩额外的默认用户名和密码

  • system system
  • rebuild rebuild

system默认没激活,但是rebuild可以正常登入

接着往下看,获取对于用户名的User对象,然后进行判断,这里的sql都是预编译的,没什么可以利用的

后续的一些系统的配置,都需要进行管理员身份验证之后才可以操作

ssrf

在类FileDownloader 的readRawText 方法中

首先获取到参数url,然后进入OkHttpUtils的get方法

这里就直接发送出去了

读取数据库信息

同样在FileDownloader 中的proxyDownload 方法中

getStorageFile 方法

这里对传入的filePath做了三种不同方式的处理

  • 如果是网页链接,则发送请求,这里也有一个SSRF
  • 如果是七牛云中的缓存则获取
  • 最后一项,针对本地文件

进入getFileOfData 方法中

首先判断是否存在../防止任意文件的读取(后续的读取文件形式都是以拼接来读取的,..\绕不过去貌似)

主要观察最后一行

return filepath == null ? datadir : new File(datadir, filepath);

datadir是配置文件的路径,也就是说,虽然不能随便读取,但是可以读取一些配置文件的信息,然后以下是win下的配置文件结构:

上面的文件都可以读取,最主要的就是.rebuild文件,这也就是为啥这个系统不用去改springboot的默认配置文件,他自己搞了一个配置文件,然后我们又可以读取配置文件夹,然后读取一下:

发现他这个安全意识还不错呢,但是没什么用,我们看他的加密方式

在com.rebuild.utils.AES类下面

AES比较熟悉啊,shiro550就是对称密钥的问题,他这里也可以提供默认密钥实现加密解密操作

然后解密一下:

直接用他的代码就行

最后就是找一下互联网的资产了,鹰图语法:

web.icon="125ec4bbe626268ec78340eb590acbb6”

ssrf和读数据库的只能在3.5这个大版本里面才有

0x03 总结

开发者对于漏洞的理解都写在代码里面了,比如针对命令执行的防护,在这个系统里面,对Runtime和ProcessBuilder 在执行命令的时候都没办法传入用户的数据进去,以及对于sql的防护,都采用预编译的方式来查询