tomcat6Filter内存马注入的实际场景解决

admin 2022年1月11日10:32:55评论117 views字数 1269阅读4分13秒阅读模式

目录:

         一、实际环境中无法获取到StandardContext?

       二、获取完localhost的StandardContext之后,无法获取准确的Servlet链接?

         三、filterDef的加载出现了ClassNotFound的错误


    

        在上一篇文章中我们讲到了tomcat6下的Filter内存马的注入:tomcat6下的Filter内存马注入,在这一篇文章我们将讲到tomcat6下Filter内存马注入的实际场景解决!

在IDEA的环境下可以了之后我们发现放到实际的tomcat环境中会出现如下问题。

01

实际环境中无法获取到StandardContext?

回头看tomcat678这个类,也就是参照bitterz师傅的Demo

tomcat6Filter内存马注入的实际场景解决

在getStandardContext方法中,根据this.serverName是无法获取到StandardContext的,target->this$0中的children是只有localhost的,而此时的serverName的值却是实际环境的IP地址,这也就是为什么我们使用IDEA可以获取到StandardContext而在实际环境中却不行的原因。

tomcat6Filter内存马注入的实际场景解决
tomcat6Filter内存马注入的实际场景解决

那么我们需要做的就是在获取在获取完StandardContext之后进项一次是否为空的判断,如果为空,则取children中的localhost。

02

获取完localhost的StandardContext之后,无法获取准确的Servlet链接?

通过实际环境测试我们发现,我们获取的StandardContext总为tomcat的根,不是我们想要的具体的Servlet,我们发现在对StandardContext(localhost)的hashMap获取时,第一个键值对的键值总为null

tomcat6Filter内存马注入的实际场景解决
tomcat6Filter内存马注入的实际场景解决
tomcat6Filter内存马注入的实际场景解决

这也就是为什么我们总会获取到根路径servlet的原因,所以在key值为null的情况下,我们直接进行下个HashMap的key值的对比,这样,便可以获取到非根路径servlet的StandardContext。

tomcat6Filter内存马注入的实际场景解决

03

filterDef的加载出现了ClassNotFound的错误

在filterDef的加载过程中,我们发现,对应的filter类确实被载入了内存当中,但是,最后我们在调用StandardContext的addFilterDef的过程中却爆出了无法找到对应filter类的情况

tomcat6Filter内存马注入的实际场景解决

追溯原因到ApplicationFilterConfig的构造方法处,接着看setFilterDef方法

tomcat6Filter内存马注入的实际场景解决

可以看到当filterDef不为null的时候,调用getFilter方法,接着看该方法

tomcat6Filter内存马注入的实际场景解决

在这里发现这里使用加载filterClass的类加载器并不是原来使用的当前线程上下文的类加载器

tomcat6Filter内存马注入的实际场景解决

所以,需要将原来加载filterClass的类加载器改为当前环境上下文的类加载器即可。

tomcat6Filter内存马注入的实际场景解决

参考链接:https://xz.aliyun.com/t/9914



tomcat6Filter内存马注入的实际场景解决

本文始发于微信公众号(谢公子学安全):tomcat6Filter内存马注入的实际场景解决

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月11日10:32:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   tomcat6Filter内存马注入的实际场景解决http://cn-sec.com/archives/473058.html

发表评论

匿名网友 填写信息