浅析Tomcat架构上的Valve内存马(内存马系列篇十一)

本文详细介绍了如何在Tomcat容器中构建内存马,通过分析Tomcat的Pipeline和Valve机制,展示了如何创建恶意Valve并将其添加到管道中,在处理请求时执行恶意代码。文章通过创建EvilValve类并利用反射将它添加到StandardContext的Pipeline中,实现了内存马的注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

这篇也是在Tomcat容器上面构造的内存马(收回之前说的不搞Tomcat了),这是建立在Tomcat的管道上面做文章的一个内存马的实现方式。这是内存马系列的第十一篇文章了。

前置

什么是Pipeline-Valve管道?

根据前面Tomcat架构的相关知识,我们是知道对于Tomcat中的Container层有四个容器:

Engine

Host

Context

Wrapper

四个容器的具体实现为。

image-20221001104548654.png

四个容器中都包含有自己的管道对象,管道对象用来存放若干阀门对象。Tomcat为其分别制定了一个默认的基础阀门。

image-20221001104820970.png

四个基础阀门放在各自容器管道的最后一位,用于查找下一级容器的管道在每个容器对象里面都有一个pipeline及valve模块。

在上层容器的管道的BaseValue 中会调用下层容器的管道。

对于Pipeline处理的流程图如下:

image-20221001104936955.png

流程分析

Container 中的Pipeline 在抽象实现类ContainerBase 中定义。

image-20221001112443299.png

而对于上面提到的标准valve实现,他们都继承了ContainerBase类,共同维护了同一个Pipeline对象

并且分别通过调用startInternal/stopInternal/destroyInternal等方法调用相应的生命周期。

image-20221001112845728.png

image-20221001112905560.png

image-20221001112915146.png

而又因为四个组件都是继承ContainerBase,所以,每个组件在执行生命周期的同时也会调用对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值