TODO:内存马分析与实现
先占个坑,慢慢学(date: 2022-05-09 13:22)
介绍
内存马,优点就是无文件落地、使用于不出网的环境中、难以查杀。
内存马的核心思想就是对访问路径映射及相关处理代码的动态注册。
目前安全行业主要讨论的内存马主要分为以下几种方式:
- 动态注册 servlet/filter/listener(使用 servlet-api 的具体实现)
- 动态注册 interceptor/controller(使用框架如 spring/struts2)
- 动态注册使用职责链设计模式的中间件、框架的实现(例如 Tomcat 的 Pipeline & Valve,Grizzly 的 FilterChain & Filter 等等)
- 使用 java agent 技术写入字节码
Servlet API 提供的动态注册机制
Servlet、Listener、Filter 由 javax.servlet.ServletContext 去加载,无论是使用 xml 配置文件还是使用 Annotation 注解配置,均由 Web 容器进行初始化,读取其中的配置属性,然后向容器中进行注册。
Servlet 3.0 API 允许使 ServletContext 用动态进行注册,在 Web 容器初始化的时候(即建立ServletContext 对象的时候)进行动态注册。可以看到 ServletContext 提供了 add或create 方法来实现动态注册的功能。只能在初始化时进行注册。在运行时为了安全原因,无法完成注册。
在不同的容器中,实现有所不同,这里仅以 Tomcat 为例调试。
- Filter型MemShell poc
- servlet
- listener
使用框架如spring/struts2
- interceptor
- controller
使用 java agent 技术写入字节码
- java agent的学习
- 内存马学习
内存马的使用
- 反序列化如何打内存马