java内存马学习 - 介绍


学习java内存马

java内存马介绍

内存马总之就是一种技术,能够将🐎放到内存里,即使没有jsp也是能够正常运行并且执命令的

同flask内存马一样,内存马都需要实现动态注册路由来实现。

对于java内存马,有如下分类:

  • 传统型内存马
    • Servlet型内存马 需要动态注册Servlet以及映射
    • Filter型内存马 需要动态注册Filter及映射
    • Listener型内存马 需要动态注册Listener

javaweb将servlet、filter、Listener等以及其处理类放在context中,并在程序运行时进行查找和匹配。这种内存马就是通过将代码添加到context的关键位置中。

  • Spring内存马

    • Controller型 动态注册Controller及其映射
    • Interceptor型 动态注册Interceptor及其映射
    • Webflux型 动态注册webfilter及映射路由
  • tomcat内存马

    • valve型内存马 动态注册valve
    • upgrade型 动态注册upgradeProtocol
    • executor型 动态替换全局executor
    • poller型 动态替换全局poller
  • Grizzly filter型 动态注册Grizzly filter

  • 其他内存马

    • websocket型 动态注册websocket以及处理逻辑
    • tomcat JSP内存马 动态注册tomcatjsp管理逻辑
    • 线程型 动态加载一个无法杀死的线程
    • RMI型 动态启动RMI Registry
  • Agent型内存马 通过hook并修改关键方法添加恶意逻辑

Agent型内存马在冰蝎和哥斯拉上都有实现

实际上agent型内存马可以hook很多位置,还可以挖掘出更多的内存马的利用方式

按照另一种分类方式可以分为:

  • 冰蝎🐎
  • 哥斯拉🐎
  • 蚁剑🐎
  • 命令回显🐎
  • 流量隧道🐎

java内存马应用范围

java内存马的使用范围:

  • 因为网络原因反弹不了shell的(不出网)
  • 反向代理暴露web端口的
  • 没有文件写权限的
  • 写不了普通🐎的(写马后会告警监控的)
  • springboot等框架无法解析webshell的
  • 对看不懂内存马的((((

但是内存马还是有缺点的:

  • 服务器重启后会失效
  • 目前技术已经能够查杀出内存马