记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

weblogic无文件webshell的技术研究

2020-11-07 09:59

weblogic FilterChain实现,创建一个Filter,随便打一个断点,观察此时的堆栈信息,如图

weblogic无文件webshell的技术研究-极度安全

通过跟踪堆栈信息,我们可以找到,在wrapRun函数中,会判断系统中是否存在filter以及listener。如果存在,则获取FilterChain,然后依次调用Filter。原理与tomcat类似。相关代码如下

  1. weblogic.servlet.internal.WebAppServletContext.ServletInvocationAction#wrapRun 函数
  2. if (!invocationContext.hasFilters() && !invocationContext.hasRequestListeners()) {
  3.     this.stub.execute(this.req, this.rsp);
  4. else {
  5.     FilterChainImpl fc = invocationContext.getFilterChain(this.stub, this.req, this.rsp);
  6.     if (fc == null) {
  7.         this.stub.execute(this.req, this.rsp);
  8.     } else {
  9.         fc.doFilter(this.req, this.rsp);
  10.     }
  11. }

而getFilterChain的代码在 weblogic.servlet.internal.FilterManager中。weblogic中主要使用FilterManager去管理系统中的Filter,包括动态注册一个Filter,获取FilterChain等。动态注册一个Filter的代码如下

  1. void registerFilter(String filterName, String filterClassName, String[] urlPatterns, String[] servletNames, Map initParams, String[] dispatchers) throws DeploymentException {
  2.         FilterWrapper fw = new FilterWrapper(filterName, filterClassName, initParams, this.context);
  3.         if (this.loadFilter(fw)) {
  4.             EnumSet<DispatcherType> types = FilterManager.FilterInfo.translateDispatcherType(dispatchers, this.context, filterName);
  5.             if (urlPatterns != null) {
  6.                 this.addMappingForUrlPatterns(filterName, types, true, urlPatterns);
  7.             }
  8.             if (servletNames != null) {
  9.                 this.addMappingForServletNames(filterName, types, true, servletNames);
  10.             }
  11.             this.filters.put(filterName, fw);
  12.         }
  13.     }

知识来源: https://www.secvery.com/3622.html

阅读:36881 | 评论:0 | 标签:shell

想收藏或者和大家分享这篇好文章→复制链接地址

“weblogic无文件webshell的技术研究”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

❤人人都能成为掌握黑客技术的英雄⛄️

ADS

标签云