记录一次代审过程中的鉴权绕过

鉴权绕过

第一处:

很简单的一个权限绕过,就是加一个header头校验

image

payload:

internalRequestKey:schedule_898901212

image

第二处:

这个鉴权绕过和shiro的权限绕过类似

在sessionfilter这个类中的dofilterInternal方法中,默认dofilter参数是true,只有当其为false的时候,才能不被鉴权

image

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

image

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

image

1.正则模式/static.*?的含义: 这是一个非贪婪模式的正则,匹配以/static开头,后面跟任意字符(包括/、.等) 的字符串(.*?表示匹配任意字符,非贪婪模式仅影响匹配长度,不影响是否匹配)

2.被匹配的字符串:/static/../je/saas/saasYh/getInfoById 该字符串明确以/static开头,后续内容包含/../je/...,符合/static.*?的匹配范围。

所以只要在任意后台目录路径前添加/static/..就可以绕过鉴权

其实这里这里不只是/static/..可以,在patterns中只要是单层路径且后面有.*?都可以绕过

举例:

/error/.*?

/adminseal.zz/.*?

/dwr/.*?

...

我没有都找出来,但是符合这个规则的都可以

新版本修复:

第一处的鉴权是直接删掉了那个header头校验

第二处的鉴权是在请求路径,多了一步检查url中是否存在

image

依次判断:

uri中包含".;" ,flag设为true 

不满足上一条件时,若包含".." ,flag设为true 

还不满足时,若以"/je/"开头且包含";" ,flag设为true 

flag为true就会触发非法请求重定向到登陆页面

image

posted @ 2025-08-07 11:30  Zephyr07  阅读(43)  评论(0)    收藏  举报