JAVA内存马类型
- Servlet-API 内存马
- Listener 内存马
- Filter 内存马
- Servlet 内存马
特定框架分类
- Spring/Struts2等框架
- Interceptor
- Controller
中间件分类
- Tomcat 的 Pipeline & Valve
- Grizzly 的 FilterChain & Filter
字节码增强型
- Java Agent 内存马
内存马的原理
- 顺序:listener -> filter -> servlet
Servlet
Servlet 是运行在 Web 服务器或应用服务器上的程序,负责处理用户请求并生成相应的返回信息。
Servlet 程序运行流程:
- Servlet 初始化:
init()
- 处理请求:
service()
- Servlet 销毁:
destroy()
Filter
Filter 用于拦截请求和响应,对其进行处理后再传递给下一个 Filter 或 Servlet。
Filter 主要方法:
init(FilterConfig filterConfig)
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
destroy()
Listener
Listener 用于监听 Web 应用中对象的创建、销毁等动作,常用于统计在线人数、初始化信息等。
Filter 内存马例子
javaCopy code
package com.evalshell.Filter; import javax.servlet.*; import java.io.IOException; public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Filter 创建"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("执行过滤过程"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { System.out.println("销毁!"); } }
内存马查杀方式
Tomcat 内存马查杀原理
- 使用 Java Agent 技术遍历已加载到内存中的 class 文件。
- 判断是否是内存马,如果是,则进行内存查杀。
排查方式
- 日志中查找可疑请求。
- 中间件的 error.log 中查找异常信息。
- 根据组件和框架排查漏洞。
- 针对 servlet 和 controller 类型,根据日志查找访问请求。
- 针对 filter 和 listener 类型,查找可能的 404 请求或大量带相同参数的请求。
查杀方式
- 使用 VisualVM、Arthas、Copagent 等工具进行内存分析和查杀。
- 使用 java-memshell-scanner 进行扫描和查杀。
注意:
- 确保不误伤正常 Java 进程。
- 使用合法的杀毒软件和安全工具进行扫描。
- 对于不确定的可疑代码,寻求安全专家的帮助。
暂无评论内容