Java内存Webshell:攻击与防御全解析

这篇文章以Tomcat为例,详细记录了关于Java内存Webshell的利用、检测以及相关思考。

内存Webshell的利用方式

图片[1]-Java内存Webshell:攻击与防御全解析-山海云端论坛

目前,内存Webshell的利用方式主要分为以下三种:

  1. 基于Servlet规范的利用: 这种方式通过动态注册Servlet规范中的组件,包括Servlet、Filter、Listener等。已有不少公开文章详细介绍了这种方式,例如《基于Tomcat的内存Webshell无文件攻击技术》。
  2. 基于特定框架的利用: 框架通常对Servlet进行了一层封装,攻击者可以动态注册框架的路由,实现内存Webshell的无文件攻击。相关研究可以参考《基于内存Webshell的无文件攻击技术研究》。
  3. 基于javaagent修改Servlet处理流程中的字节码: 使用工具如memShell,通过修改字节码来实现对Servlet处理流程的控制。这种方式较为灵活,但也更为复杂,工具地址在这里。

这些利用方式通常需要能够执行任意Java代码的场景,例如反序列化漏洞、JNDI注入等。然而,在某些情况下,公开的工具并不十分方便,例如在不出网的情况下利用shiro反序列化漏洞。因此,直接注入一个功能强大的Webshell管理工具(如冰蝎)的内存Webshell,会更为方便后续的利用。

内存Webshell的检测

内存Webshell的检测相对较为复杂,主要有以下几种方式:

  1. VisualVM监控mbean: 通过监控mbean的注册情况来检测内存Webshell。但这种方式容易被攻击者绕过,因为注册mbean只是为了方便资源管理,并不影响Webshell的功能。攻击者可以通过执行Java代码卸载注册的mbean,以隐藏Webshell。
  2. Java Instrument技术: 利用Java Instrument技术,通过retransformClasses方法对敏感类进行retransform,并将加载的class dump出来,以进行检测。这种方式比较精准,但需要知道内存Webshell大致隐藏在哪里。
  3. arthas检测: arthas是一款Java诊断工具,支持观察方法调用情况,可以通过arthas监控敏感类的加载,观察源代码来判断是否是Webshell。这种方式比较直观且操作简单。

总结

虽然Java Instrument技术可以精准检测内存Webshell,但前提是需要了解Webshell大致隐藏在哪里。因此,对内存Webshell的注入场景有较好的覆盖,将其转化为文件之后,可以利用支持字节码的检测工具进行定时自动化检测。这样的做法能够更有效地保护系统免受内存Webshell的威胁。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容