后端:https://gitee.com/jeequan/jeepay
前端:https://gitee.com/jeequan/jeepay-ui
可安可不安,
activemq:https://activemq.apache.org/components/classic/download/classic-05-16-07
更改conf/credentials.properties中的密码,然后运行bin/win64/activemq.bat,
权限验证
jeepay-manager子项目,
WebSecurityConfig实现WebSecurityConfigurerAdapter接口,
设置HTTP 安全配置 ,
初始化全局安全配置,
首先会去匹配全局配置,然后再去匹配http安全配置,
因此想要未授权访问,只能访问html、js之内的,或者swagger接口文档,
查看了security的版本,此版本也没有认证绕过漏洞,对相应符号进行了过滤,url编码或者不编码都会去匹配,
匹配到就凉凉,
获取到合法url后,匹配相应规则看是否放行,
之前设置了HTTP 安全配置,其中添加了JeeAuthenticationTokenFilter,
因此会调用JeeAuthenticationTokenFilter的doFilterInternal函数判断是否已认证,
这里的iToken使用jwt加密,因此利用秘钥解密,而且秘钥不是动态生成,t7w3P8X6472qWc3u
解密后iTolen后,需要在redis中查询是否存在cacheKey,如果不存在,那么iToken就无效,
思路就是我们看能否利用jwt密钥伪造iToken,需要了解cacheKey的生成方式,因为iToken中存在cacheKey,
cacheKey由sysuserid和fastuuid()函数生成的随机36字符值组成,因为sysuserid和uuid绑定后缓存到本地,
那么我们就伪造不了iToken了,越权也不行,
jeepay-merchant子模块的认证方式和jeepay-manager子模块的认证方式相同,
jeepay-payment子模块没有通过spring security设置权限,
因为存在一些支付接口需要用户付款,
对于其他接口,权限认证直接在相应接口中验证,
反射型xss+存储型xss
spring boot结合thymeleaf模版引擎存在以下利用方式,
https://www.freebuf.com/articles/web/248877.html
https://www.freebuf.com/articles/network/250026.html
https://www.freebuf.com/articles/web/339962.html
正当以为存在模版注入,发现使用的不是thymeleaf,此项目使用的是freemarker模版引擎,版本为2.3.31,
来个反射型xss(实现没有洞写),
http://172.16.13.77:9216/api/common/payForm/PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
freemarker的2.3.22*版本将api_builtin_enabled默认设置为false,就不能使用api函数了,
2.3.30+绕过,参考:https://xz.aliyun.com/t/15802,
需要更改模版内容为以下内容就能命令执行,不过这里利用不了,因为改不了模版,
<#assign ac=springMacroRequestContext.webApplicationContext>
<#assign fc=ac.getBean('freeMarkerConfiguration')>
<#assign dcr=fc.getDefaultConfiguration().getNewBuiltinClassResolver()>
<#assign VOID=fc.setNewBuiltinClassResolver(dcr)>${"freemarker.template.utility.Execute"?new()("cmd.exe /c calc")}
这里头像用url传入,可以做存储型xss,