• GlassFish内存马分析


    前言

    Glassfish5.0.0

    分析 glassfish Filter内存马

    环境搭建

    HelloFilter
    在这里插入图片描述

    分析Filter
    首先在Servlet中打下断点,观察调用栈,
    在这里插入图片描述

    观察调用栈,在StandardWrapper中第一次调用了doFilter,再次说明,个人认为,分析一个filter运行的过程。首先要关注的是filterchain是如何生成的。因为只有filterchain生成之后,才能说去调用doFilter,让filter起作用。而第一次调用doFilter的时候往往就能找到关于filterchain的线索。
    在这里插入图片描述

    org.apache.catalina.core.StandardWrapperValve:invoke(),调用了filterChain.doFilter(hreq, hres);
    在这里插入图片描述

    关注filterChain是如何生成的。

    org.apache.catalina.core.StandardWrapperValve:invoke()中第120行代码。调用了createFilterChain,跟进该方法。

    ApplicationFilterChain filterChain = factory.createFilterChain((ServletRequest)request, wrapper, servlet);
    在这里插入图片描述

    public ApplicationFilterChain createFilterChain(ServletRequest request, Wrapper wrapper, Servlet servlet) {
    if (servlet == null) {
    return null;
    } else {
    ApplicationFilterChain filterChain = null;
    StandardContext context = (StandardContext)wrapper.getParent();
    List filterMaps = context.findFilterMaps();
    if (filterMaps.isEmpty()) {
    return filterChain;
    } else {
    DispatcherType dispatcher = request.getDispatcherType();
    String requestPath = null;
    Object attribute = request.getAttribute(“org.apache.catalina.core.DISPATCHER_REQUEST_PATH”);
    if (attribute != null) {
    requestPath = attribute.toString();
    }

                String servletName = wrapper.getName();
                int n = 0;
                Iterator i = filterMaps.iterator();
    
                FilterMap filterMap;
                ApplicationFilterConfig filterConfig;
                while(i.hasNext()) {
                    filterMap = (FilterMap)i.next();
                    if (filterMap.getDispatcherTypes().contains(dispatcher) && this.matchFiltersURL(filterMap, requestPath, context.isCaseSensitiveMapping())) {
                        filterConfig = (ApplicationFilterConfig)context.findFilterConfig(filterMap.getFilterName());
                        if (filterConfig != null) {
                            if (filterChain == null) {
                                filterChain = this.internalCreateFilterChain(request, wrapper, servlet);
                            }
    
                            filterChain.addFilter(filterConfig);
        
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    eclipse项目导入教程
    用于数据科学的顶级 C/C++ 机器学习库整理
    AlphaFold2源码解析(8)--模型之三维坐标构建
    以太坊合并后,区块链生态将发生什么改变?
    Unity关于GL绘制和Gizmos绘制的Matrix问题。
    常见的C/C++开源数值计算库
    《Python入门到精通》time模块详解,Python time标准库,time库函数大全
    ubuntu下DHCP服务器搭建
    【Java初阶】类和对象
    视觉slam14讲 ——ch2实践部分
  • 原文地址:https://blog.csdn.net/stopys6/article/details/132917735