一种tomcat中间件留持久化后门的思路
0x01 背景
在红队行动中,内存马虽然好用,但是它存在的最大的问题是重启之后就失效了。这时候留持久化后门就是一个刚需了。今天简单分享一个构造Tomcat中间件持久化后门的思路。
0x02 原理
相信通过@Filter/@Servlet
标签来实现Tomcat后门的想法已经被用烂了,这里分享一个比较冷门的接口ServletContainerInitializer
。它是Servlet 3.0
新增的一个接口,主要用于在容器启动阶段通过编程风格注册web三大组件Filter
, Servlet
以及Listener
,以取代通过web.xml配置注册,减少了对配置的依赖。我们可以用这样的机制来注册一个实现了webshell功能的组件,下面以注册Filter为例简单示范一下。
0x03 实现
首先我们编写一个class实现ServletContainerInitializer
接口,其中onStartup
方法会在Tomcat中间件重启加载当前webapp会优先执行这个方法。通过改方法,我们可以注册一个webshell的filter。
1 | package org.apache; |
最后在打包jar之前创建一个文件META-INF/services/javax.servlet.ServletContainerInitializer
,并填写以上class名即可。
为了兼容性我们最好使用jdk1.5进行编译,同时为了防止被行为分析我们最好对代码进行混淆。
最后分享给大家一个我自己做好的一个后门给大家做一个参考。