SpringBootCms代码审计过程记录
2023-4-23 21:28:0 Author: xz.aliyun.com(查看原文) 阅读量:32 收藏

1、环境搭建

项目地址:https://gitee.com/heyewei/SpringBootCMS.git

使用git clone +项目地址 下载使用idea打开即可,之后修改resources 目录下面的application.properties中的数据库配置文件,为自己的数据库配置即可,之后运行sql文件(springbootcms.sql),在启动App即可


2、项目依赖

查看pom.xml 文件发现应用了如下组件

Fastjson > 1.2.78
mybatis > 3.5.1
ehcache > 2.0.4

Fastjson没有找到可控触发点,实在是太菜了

3 、代码审计

存在三个filter其作用域分别为

pageCacheFilter > /*
permissionFilter > /admin/*
urlFilter > /*

其中pageCacheFilter 主要是页面缓存,而PermissionFilter 主要是权限相关的filter,一些排除文件

获取相关请求URL后进入for循环判断,但是这里是采用startsWith来判断开头是否为adminExcludes中的内容,如果是则直接放行,我们这里可以使用admin/login/../../admin/xxx来绕过fiter达到功能的访问

断点调试查看

成功绕过,但是功能点404

带session访问也是

菜鸡迷茫,是因为springboot的资源匹配问题吗。

3.1 前台任意文件下载

路由:/common/file/download

接收了一个fileKey参数,并未做任何过滤,直接拼接导致任意文件读取

直接进行读取文件

验证:读取pom.xml文件

3.2 前台XSS

路由:/guestbook/save

获取用户输入后并未做任何过滤,直接写入数据库,导致xss

跟踪save方法发现直接进行了写入操作

验证:弹窗

管理员登录后台时,触发

由于系统并未做csrf攻击的防范,于是我们可以利用xss来神不知鬼不觉的添加个账户

POC

<script>var xhr=new XMLHttpRequest();xhr.open('POST', '/admin/admin/save');var f=new FormData();f.append('username', 'test');f.append('password', '123');f.append('rePassword', '123');f.append('name', '');f.append('roleIds', '1');xhr.send(f);</script>

用户只有两个,分别为read 和admin,而上面的poc的作用是添加一个test账户

留言有长度限制,尽量精简一点,否则会报404

之后管理员访问留言面板

成功添加管理账户

3.3 多处越权

通过审计发现,该系统压根没有做任何权限校验,permissionFilter 只是判断了是否是演示账户权限,比如这个获取id之后重置密码

验证:id为1 的是admin账户

成功登录

3.4 目录遍历

路由:/admin/template

用户可控参数 directory,发现调用了TemplateUtils.getTemplateFiles 方法跟进查看

未做任何过滤直接拼接,然后在判断该文件夹是否存在,不存在则创建文件,剩下的代码就是遍历文件夹里面的文件了

验证:/admin/template?directory=default/../../../java/com/cms/config

3.5 任意文件查看与代码写入

依然是未做任何过滤

验证:结合之前的目录遍历获取文件名后在拼接目录即可

修改也是可以的

我们可以通过通过修改程序代码,来获取服务器权限,写入自定义代码,记得导包

成功写入了文件

我们后面只需要等待服务器重启即可,自行演示重启

3.6 任意文件删除

路由:/admin/template/delete

同样是可控两个参数fileName、directory 并非做任何限制过滤,导致我们可以删除服务器中的任意文件

验证:删除桌面上的2.txt

成功删除

3.7 任意文件删除2

路由:/admin/database/delete

跟进一下delete,发现是直接进行的拼接,然后直接进入删除文件的逻辑了

验证:依然是桌面的2.txt(老演员了),成功删除

4、总结

依然还是有很多隐藏问题未被发现,对于这个项目用于来练手还是可以的,如有问题,感谢师傅指正。


文章来源: https://xz.aliyun.com/t/12471
如有侵权请联系:admin#unsafe.sh