点击蓝字
关注我们
日期:2023-06-12 作者:Corl7 介绍:记录一次对某后台管理系统的审计,使用的框架为 SpringBoot+Mybatis
。
最近在学习代码审计,为了写一篇关于代码审计的文章,找了许多源码并在本地搭建,但是大多数都不适合写文章,不是漏洞太少就是没有新颖点。于是就找到了下面的这个系统,在互联网上也见过不少,就开始了对该系统的审计,个人也是刚入门,大佬勿喷。
通过查看引入的jar
包,发现存在Shiro
,版本为1.2.3
,该版本存在反序列化漏洞,并且在Shiro
的1.2.4
之前版本中使用的是默认密钥KPH+blxk5D2deZilxcaaaA==
。
查看Shiro
配置文件,设置了Cookie
名称为rememberMeTest
。
设置了过滤器,使用/**
拦截了所有请求,是不存在Shiro
权限绕过的漏洞的。
直接上工具,进行漏洞验证,设置关键字为rememberMeTest
,密钥为KPH+blxk5D2deZilxcaaaA==
,爆破利用链及回显之后,成功执行命令。
使用MultipartFile
关键字,进行全局搜索,发现在DeveFileInfoController
中,存在文件上传的方法,点进行进行查看。
先看upload
接口,先判断文件是否为空,然后获取文件名,然后截取文件名最后一个.
之后的内容为后缀名,但是没有使用到,然后定义了文件上传路径,在拼接路径名和文件名,在调用file.transferTo
方法进行上传文件,因此是存在任意文件上传漏洞的。
查看文件头,确定了最终路由为/deve/deveFileInfo/upload
。
由于Shiro
框架,并且配置了过滤器,因此直接上传是不可能成功。伪造一个上传数据包,使用登录成功后的Cookie
,直接上传成功。
在E:/test
目录中存在上传的文件,因为该项目为SpringBoot
项目,默认并不解析jsp
,而且上传路径也并非网站目录,因此该上传并没有什么利用价值。
在看另外一个上传点,这里通过断点的方式启动,首先获取上传路径,这里获取到的上传路径还是为E:/test
目录,如果不存在的话进行创建,然后接收前端file
参数传过来的内容,在进行获取后缀名,在通过UUID
拼接.
和后缀名,最后通过字节流的方式进行保存,也没有对后缀进行校验,因此也存在任意文件上传。
构造数据包,上传成功。
在看Controller
层的时候,发现了一个查询文件列表的方法,这里首先使用deveExpResourceService.queryFileList
方法获取文件列表,然后创建了DataGrid
对象,将查询到的文件内容和文件总数赋值给DataGrid
对象,然后返回DataGrid
对象。
进入到deveExpResourceService
查看queryFileList
方法,如果dirpath
是否是空,则执行File.listRoots
,否则执行dir.listFiles
方法,进行查询文件列表,最后进行返回文件列表,由于path
参数可控,并且绑定读取文件列表的目录,于是存在目录遍历漏洞。
路由为/deve/deveExpResource/listInit
。
构造请求,可获取任意文件夹中的文件列表。
全局搜索download
,发现了一个下载文件的方法,简单通一下源码,将paths
以逗号进行分割保存到pathArr
数组中,然后对数组中的第一个值进行创建File
对象。
然后判断是文件还是文件夹,如果是文件的话,downLoadPath
的值就为文件的路径,如果是文件夹的话,先获取FileDownloadPath
的值,即为E:/test
,使用downLoadPath
拼接UUID和.zip
作为新的downLoadPath
,使用for
循环的方式读取文件夹中的文件,最后使用zip
的方法进行压缩。
如果是文件的话,通过download
方法进行下载。
请求路由为/deve/deveExpResource/download
,直接构造请求,成功读取C:/windows/win.ini
文件。
这套系统还是存在很多漏洞的,还有任意目录上传文件漏洞、任意文件删除漏洞、XSS
等,这里就不再写了。总体来说,这套比较适合新手练手吧,并没有写过多的方法,也没有写过滤器对前端传过来的参数进行过滤。
点此亲启
ABOUT US
宸极实验室隶属山东九州信泰信息科技股份有限公司,致力于网络安全对抗技术研究,是山东省发改委认定的“网络安全对抗关键技术山东省工程实验室”。团队成员专注于 Web 安全、移动安全、红蓝对抗等领域,善于利用黑客视角发现和解决网络安全问题。
团队自成立以来,圆满完成了多次国家级、省部级重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。
对信息安全感兴趣的小伙伴欢迎加入宸极实验室,关注公众号,回复『招聘』,获取联系方式。