Java安全之Filter权限绕过 (3)

Java安全之Filter权限绕过

看到代码中只是对比了URI是否为/system/UserInfoSearch.do,而多加一个/并不影响正常解析,而又能让该规则匹配不到。

URL编码绕过

还是用上面的代码演示,绕过手法则是换成url编码绕过的方式。

payload:/system/%55%73%65%72%49%6e%66%6f%53%65%61%72%63%68%2e%64%6f

Java安全之Filter权限绕过

绕过分析

当Filter处理完相关的流程后,中间件会对请求的URL进行一次URL解码操作,然后请求解码后的Servlet,而在request.getRequestURL()和request.getRequestURI()中并不会自动进行解码,所以这时候直接接收过来进行规则匹配,则识别不出来。这时候导致了绕过。

Java安全之Filter权限绕过

Java安全之Filter权限绕过

Spring MVC中追加/绕过

在SpringMVC中假设以如下方法配置:

<servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

特定情况下Spring匹配web路径的时候会容错后面的/

如,/admin/main.do/

修复

使用该代码接受URI

String uri1 = request.getServletPath() + (request.getPathInfo() != null ? request.getPathInfo() : "");

下面来尝试前面的几种绕过方式。

分号阶段绕过 payload: /login/main.do;123

Java安全之Filter权限绕过

多/绕过payload: //system/UserInfoSearch.do;123

Java安全之Filter权限绕过

URL编码绕过payload:/system/%55%73%65%72%49%6e%66%6f%53%65%61%72%63%68%2e%64%6f

Java安全之Filter权限绕过

../绕过payload:/system/login/../../login/main.do

Java安全之Filter权限绕过

均不可用,使用上面的方式接受URI后,接受过去的时候发送特殊字符一律被剔除了。打断点可见。

Java安全之Filter权限绕过

关注点

前面提到过request.getRequestURL()和request.getRequestURI(),这些危险字符并不会自动剔除掉。可重点关注该方法。

参考

https://blog.csdn.net/qq_38154820/article/details/106799046

0x02 结尾

不只是Filter里面可以做权限绕过,在使用到一些Shiro框架的时候,也会有一些权限绕过的方式。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjsyd.html