Resin url解析特性导致权限认证绕过分析
一、前言 权限认证是一种用于控制系统资源访问的安全机制,如果权限认证存在缺陷,将对Web应用的保密性、完整性、可用性造成严重影响。 此次分享的内容是之前挖掘国内某OA漏洞时,受tomcat下路由分发特性导致认证绕过思路影响去分析的。旨在讨论Resin URI规范化特性导致的权限认证绕过问题。 二、Servlet URL匹配模式 在 java 应用中通常通过xml声明Servlet <Servlet> <!-- 唯一标识这个 Servlet 的名称 --> <Servlet-name>helloServlet</Servlet-name> <!-- Servlet 类的全限定名 --> <Servlet-class>com.Mmuz.helloServlet</Servlet-class> <!-- 初始化参数(可选) --> <init-param> <param-name>xxx</param-name> <param-value>Hello, World!</param-value> </init-param> <!-- Servlet 加载顺序(可选) --> <load-on-startup>1</load-on-startup> </Servlet> <!-- URL 映射配置 --> <Servlet-mapping> <!-- 引用上面定义的 Servlet-name --> <Servlet-name>helloServlet</Servlet-name> <!-- 定义 URL 映射路径--> <url-pattern>/hello/1.Servlet</url-pattern> </Servlet-mapping> 也可以在类定义出上使用Servlet规范中定义的WebServlet注解去声明。 Servlet声明时可以不同类型的urlpattern,当路由请求时,Servlet 会根据不同的URL模式进行匹配。匹配方式主要有4种,优先级是精确匹配 > 路径匹配 > 后缀匹配 > 缺省匹配 精确匹配 uri必须和url-pattern完全一致,如 /hello/1.Servlet 最长路径匹配 也叫路径匹配,指以*结尾的url-pattern,示匹配以该路径开头的所有请求,越长的路径匹配优先级越高。 /hello/* * 由于Resin中会将*转换为 /*,所以*是路径匹配 /* /hello/a* 匹配/hello/a/x 后缀匹配...