什么是内存马

先简单梳理一下webshell的发展历程,大致如下

大马==>小马拉大马(先上传小马,之后通过小马来上传大马)==>一句话木马==>加密一句话木马==>加密内存马

这里在附上一张传统webshell的分类图

image-20240402161509484

内存马是无文件攻击的一种常用手段,不会有文件落地,给检测带来巨大难度。其中,Webshell内存马是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马。

Tomcat内存马

Java应用服务器有很多,流行的有:

image-20240402162128400

其中最常见的就是Tomcat,而Java内存马中最典型的就是Tomcat内存马,主要分为以下几类:

  • servlet-api 类
    • filter 型
    • servlet 型
  • spring 类
    • 拦截器
    • controller 型
  • Java Instrumentation 类
    • agent 型

实现逻辑

Java web有三大组件,分别是Listener、Filter、Servlet

这里简单梳理一下这三大组件的作用:

  • Servlet:是运行在 Web 服务器或应用服务器上的程序,它是作为来自 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。它负责处理用户的请求,并根据请求生成相应的返回信息提供给用户
  • Filter:即过滤器,是对Servlet技术的一个补充,它负责对到资源的请求或来自资源的响应进行过滤、检查
  • Listener:即监听器,它负责监听客户端、服务端的操作,并触发执行一些代码

客户端发起的web请求会依次经过Listener、Filter、Servlet三个组件,我们只要在这个请求的过程中做手脚,在内存中修改已有的组件或者动态注册一个新的组件,插入恶意的shellcode,就可以实现内存马。为了便于理解,附上两张客户端请求的流程图:

image-20240402164303562

image-20240402164339037

鸣谢

Comments

2024-04-02

⬆︎TOP