记录一次代审过程中的鉴权绕过
鉴权绕过
第一处:
很简单的一个权限绕过,就是加一个header头校验

payload:
internalRequestKey:schedule_898901212

第二处:
这个鉴权绕过和shiro的权限绕过类似
在sessionfilter这个类中的dofilterInternal方法中,默认dofilter参数是true,只有当其为false的时候,才能不被鉴权

跟到matches方法中,看这个代码他会匹配url和patterns中的134个路径字符串,当匹配成功的时候就会返回true,就可以使dofilter为false

然后一直调试直到循环可以进到判断当中,这时候pattern为/static.*?

1.正则模式/static.*?的含义: 这是一个非贪婪模式的正则,匹配以/static开头,后面跟任意字符(包括/、.等) 的字符串(.*?表示匹配任意字符,非贪婪模式仅影响匹配长度,不影响是否匹配)
2.被匹配的字符串:/static/../je/saas/saasYh/getInfoById 该字符串明确以/static开头,后续内容包含/../je/...,符合/static.*?的匹配范围。
所以只要在任意后台目录路径前添加/static/..就可以绕过鉴权
其实这里这里不只是/static/..可以,在patterns中只要是单层路径且后面有.*?都可以绕过
举例:
/error/.*?
/adminseal.zz/.*?
/dwr/.*?
...
我没有都找出来,但是符合这个规则的都可以
新版本修复:
第一处的鉴权是直接删掉了那个header头校验
第二处的鉴权是在请求路径,多了一步检查url中是否存在

依次判断:
uri中包含".;" ,flag设为true
不满足上一条件时,若包含".." ,flag设为true
还不满足时,若以"/je/"开头且包含";" ,flag设为true
flag为true就会触发非法请求重定向到登陆页面


浙公网安备 33010602011771号