梅子酒
卫兵实验室上海研究分院前言周末看了下orich和幻猫出的non-RCE,这个题目主要涉及到的点有三个,分别为:
鉴权绕过
Servlet时间竞争绕过黑名单
AspectJWeaver反序列化Gadget构造
这一篇文章就主要针对这三个点进行分析。
鉴权绕过在这个题目中设计了几个Filter,这里只说下涉及到的两个:
AntiUrlAttackFilter
LoginFilter
当我们需要访问/admin/*格式的地址时,会触发LoginFilter要求我们密码,然而密码无从知晓。
而AntiUrlAttackFilter这个过滤器对所有url生效,并且里面进行了对url的处理:
OverridepublicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{HttpServletRequestreq=(HttpServletRequest)servletRequest;HttpServletResponseres=(HttpServletResponse)servletResponse;Stringurl=req.getRequestURI();if(...){...}elseif(url.contains(";")){StringfilteredUrl=url.replaceAll(";","");req.getRequestDispatcher(filteredUrl).forward(servletRequest,servletResponse);}else{filterChain.doFilter(servletRequest,servletResponse);}}因此对于/;admin/importData格式的请求,AntiUrlAttackFilter会对其处理变为/admin/importData并重新进行路由,鉴权也就被绕过了。
Servlet时间竞争在该题目中,攻击的入手点在于AdminServlet下的doGet(),我们需要传入一个jdbcurl,服务端会对该jdbcurl使用