内存马探知
前言
本文研究的是java的内存马,但是探索的过程是可以作为模板套用到挖掘其他组件上的漏洞的,后面会陆续挖掘python等语言的内存马,从我网上看了许多关于内存马的文章来说,java的内存马是很经典的
初探内存马
‘为了了解java的内存马,首先需要了解tomcat,来看看对于tomcat的总结
Tomcat 架构
- Connector 模块 :是 Tomcat 与客户端通信的入口点。它接收客户端请求,并将其传递给容器进行处理。常见的 Connector 类型有 HTTP Connector(处理 HTTP 请求)和 AJP Connector(用于与 Apache HTTP Server 等 Web 服务器通信)。
- Container 模块 :负责处理请求和响应的业务逻辑。它包括多个子组件,如 Engine、Host 和 Context。Engine 是容器的顶层元素,Host 代表一个虚拟主机,Context 对应一个 Web 应用程序。
Tomcat 配置文件
- server.xml :这是 Tomcat 的主配置文件,定义了服务器的总体结构,包括 Connector、Container、Service 等组件的配置。例如,可以在这里配置 HTTP 端口、HTTPS 设置、虚拟主机等。
- web.xml :每个 Web 应用程序都有一个 web.xml 文件,用于定义应用程序的部署描述符。它包括诸如 Servlet 定义、Servlet 映射、过滤器配置等信息。
Tomcat 的组件(与内存马相关)
- Class Loader 组件 :Tomcat 有自己独特的类加载器层次结构。它允许不同的 Web 应用程序加载自己的类,而不会相互干扰。这在一定程度上为内存马的隐藏和运行提供了可能。内存马可以利用类加载器的机制,在不修改磁盘文件的情况下,动态加载恶意类。
- Servlet 容器组件 :Servlet 是 Java Web 开发的核心组件。Tomcat 的 Servlet 容器负责加载、实例化和管理 Servlet。内存马可以伪装成正常的 Servlet,通过容器的生命周期方法(如 init()、service() 等)执行恶意代码。
Tomcat 的运行机制(与内存马相关)
- 请求处理流程 :当客户端发送请求到 Tomcat 时,Connector 接收请求,并将其解析为 HttpServletRequest 对象。然后,请求被传递给相应的 Context,根据 Servlet 映射找到对应的 Servlet,并调用其 service() 方法来处理请求。内存马可以在这个过程中拦截请求,篡改请求或响应内容,或者执行其他恶意操作。
- 类加载和初始化 :Tomcat 在启动过程中会加载和初始化各个组件,包括类加载器和 Servlet 容器。内存马可以在类加载器加载类或者 Servlet 容器初始化 Servlet 的阶段进行注入和激活。