TDuckCloud/tduck-platform

文件上传导致的xss && 内置账号默认账号密码登录导致的后台接管

Opened this issue · 1 comments

任意文件上传导致的xss

image-20231018162118142

根据经验和名字,这个类基本上就是一个通用类,统一作为文件上传功能的接口,如果能上传上去,可能会有执行权限的风险,在阅读了一部分的springboot的文档后发现如下

首先进入avatar函数,这个函数会接收名为file的数据并赋值到file中,文件类型是[MultipartFile](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html),是springboot接受文件内容的类。
**随后进入37行,这里对目标path进行了赋值,问题也出在这里。file.getOriginalFilename()获取到我们上传文件的全部名称。FileUtil.extName,获取到了我们上传文件的后缀。使用随机值作为名字。赋值给了path。这里后缀我们可控。**也是这个漏洞的核心点

  String path = IdUtil.simpleUUID() + '.' + FileUtil.extName(file.getOriginalFilename());

接下来进入到处理文件的代码,38行。调用了OssStorageFactory.getStorageService()方法,我们进入这个方法中,简单判断下默认属性,进入到build()函数中,主要看build函数,点击跳进去。

image-20231018164409876

image-20231018171050980

前面先对config进行了赋值,同时对上传文件的属性进行了判断,支持云上传。如果没有配置,那么直接进入后面的else判断。上传文件到本地。

首先进入44行,创建一个ApplicationHome类,给config分别赋值Domain和UploadFolder。随后创建一个LocalStorageService类并返回。随后回到最开始的OssStorageFactory.getStorageService().upload(file.getInputStream(), path),这里的LocalStorageService是OssStorageFactory的实现类,进入LocalStorageService的upload方法,如下所示:

image-20231018172500597

接收传过来的文件的流和path,23行对目标进行设置文件路径,以path结尾,这里path前面进行了名称重命名,所以无法进行目录穿越。但是文件这时已经传上去了,对后缀并未进行检测。随后返回数据。

至此,完成了文件上传,至于利用方式,当前只能传html,其他的不解析。

默认账号密码登录

去看安装文档就能知道,我们是直接下载sql数据库进行网站的安装的。根据官网提示,也是让我们直接创建一个数据库,随后导入这个sql文件,进行网站的搭建的。

image-20231019151226008

这里会默认创建两个账号,一个是admin@tduckcloud.com , 另外一个是test@tduckapp.com 。其中admin@tduckcloud.com这个账号是管理员账号。这两个账号对应的密码为123456,12345678。均为hash加密。

image-20231019151607185

image-20231019151701702

鉴于这个sql文件是作为开发网站使用的sql,其中包含着网站相关的配置,一般开发者会直接使用默认账号密码进行配置。而不会是删除初始账号和密码

所以默认的账号和密码可以正常登录后台账号