Weblogic路由分析及内存马思考
前言
这篇文章源于分析Weblogic XmlDecoder 反序列化漏洞过程中,对weblogic还有哪些内置服务和weblogic如何处理uri进行匹配进对应的servletContext等疑问进行分析记录
寻找SerlvetContext
weblogic/socket/MuxableSocketDiscriminator.class对http请求进行初始化,并将报文协议包装为MuxableSocket对象
weblogic/servlet/internal/MuxableSocketHTTP.class 对http(s)原始报文进行解析
获取到请求URI后会先从从服务器获取请求对应的ServletContext
内置服务如下
获取到对应的ServletContext后,对URI进行处理进行Serlvet匹配
weblogic/servlet/internal/WebAppServletContext.class#resolveDirectRequest
上面就是weblogic对用户传入的URI进行servletContext、servlet匹配的大概过程了
内存马思考
流程分析
通过上面的分析,发现weblogic也跟其他中间件相似,也是通过context上下文进行访问匹配控制。
文章以Servlet和Filter内存马原理为例,且为了更好地理解Weblogic处理Servlet和Filter的过程,本地打包一个测试服务,并上传至weblogic进行部署
由于本地weblogic使用的环境问题,需要对web.xml进行修改
jdk1.6需要将web.xml内容修改如下
|
|
部署过程不需要额外操作
完成部署后断点进行跟踪
weblogic/servlet/internal/MuxableSocketHTTP.class#resolveServletContext,servlet和filter都保存在目标servletContext中
weblogic/servlet/internal/WebAppServletContext.class#wrapRun
在进入servlet前,程序会先判断是否存在Filter,且会提取出符合条件的Filter对象
判断符合条件的Filter取决于FilterManager中的filterPatternList和filters,前者保存Filter实例对象,后者保存ServletMapping对象,用于与用户输入的uri进行匹配,进而提取合适的Filter实例对象
执行符合要求的Filter对象会执行doFilter方法,对数据进行处理(权限校验、字符编码等)
若通过Filter,程序最终会进入符合要求的Servlet,对数据进行处理
实现猜想
1、由于servlet和filter都是基于servletContext,可以尝试使用反射获取指定servletContext上下文进行注入servet或filter内存马(应该比较好实现)
2、模拟部署操作,实现注入servletContext(猜测会难实现)
由于这篇文章用于了解Weblogic的执行逻辑,所以后面会专门出一篇文章对上述的想法尽可能的实现