利用过滤器缺陷进行权限绕过
主要针对:
使用 request.getRequestURI() 及 startWith、endWith进行校验的情况。
方法概括:
- 非标准化绕过:
尝试通过在URI引入类似/login(白名单接口,可以通过测试得出,一般登陆都是不需要权限 校验的)/…/的样式,伪造白名单接口,进行权限绕过。例如:
/system/login/../UserInfoSearch.do
- URL截断绕过:
在URL中有一个保留字符分号(;),主要作为参数分隔符进行使用,有时候是请求中传递的参数太多了,所以使用分号(;)将参数对(key=value)连接起来作为一个请求参数进行传递。
直接在URI中引入分隔符,正常来说是不会对实际接口的访问造成影响的。尝试通过在在URI引入参数分隔符;,进行切割URI绕过限制,例如:
/system;Bypass/UserSearch.do;Bypass
- URL编码绕过:
当filter处理完相关的流程后,中间件会对请求的URL进行一次URL解码操作,然后再找到对应的Servlet进行访问。
尝试对URI进行URL编码/多重URL编码,尝试绕过。
免责声明:本文中提到的漏洞利用Poc和脚本仅供研究学习使用,请遵守《网络安全法》等相关法律法规。