什么是Java内存马?一文讲透无文件WebShell原理与Msmap的定位
什么是Java内存马一文讲透无文件WebShell原理与Msmap的定位【免费下载链接】msmapMsmap is a Memory WebShell Generator.项目地址: https://gitcode.com/gh_mirrors/ms/msmapJava内存马是一种只存在于JVM进程内存中的无文件WebShell磁盘上不留任何痕迹。本文用一篇文章讲透内存马的注入原理、常见挂点与检测思路并介绍开源内存马生成器 Msmap 如何一键生成兼容 Tomcat、Spring 等容器以及蚁剑、冰蝎、哥斯拉等管理客户端的内存马。一、Java内存马是什么无文件WebShell的本质 传统 WebShell俗称jsp 马是把文件上传到服务器磁盘管理员可以通过目录遍历、文件比对、杀毒扫描发现并删除它。内存马走的完全是另一条路对比项传统文件型WebShellJava内存马无文件存在形式磁盘上的 .jsp/.jspx 文件JVM 内存中的类字节码检测方式文件扫描、MD5 比对内存扫描、堆 dump 分析清除方式删除文件即可重启进程才能彻底清除持久性长期存在进程退出即消失一句话理解内存马 把恶意类加载进正在运行的 Java 进程并挂到请求处理链路的组件上。只要请求命中该组件马体就会被唤醒执行——因为不落盘所以被称为无文件 WebShell。二、内存马注入原理四步看懂全过程无论是渗透测试还是安全研究理清这 4 步就能看懂所有内存马的注入链入口先借助漏洞反序列化、JSP 上传、表达式注入等在目标进程内执行代码加载在内存中构造字节码通过ClassLoader.defineClass把自定义类加载进进程挂钩把该类注册为容器的 Valve / Listener / Filter / Interceptor 等组件拦截后续所有请求回传请求携带约定密码参数时马体按预设编码器解密 payload、执行命令并把结果写回响应。 密码和编码器在生成马代码时就以常量形式嵌入这也是 Msmap 需要六层菜单选参数的原因。三、常见容器挂点清单内存马都挂在哪儿以 Msmap 目前支持的 Java 侧挂点为例容器可注入组件说明Tomcat 7 / 8 / 9 / 10Valve、Listener、WsFilter、Servlet最常用四种组件全覆盖SpringJDK8Interceptor、HandlerSpring 框架应用Resin 3 / 4ListenerResin 应用WebLogicListener中间件场景JDKJVMJavaXHttpServlet 重定义进阶场景AgentFileless 无文件注入以 Tomcat Valve 为例马体以动态代理身份插入请求管线在每个请求的invoke时机执行挂钩回调源码模板见 gist/java/container/tomcat/valve.py。四、Msmap 的定位模块化的内存马生成框架手工写一匹内存马需要分别编写容器挂钩、上下文获取、解码器、马体 stub、编码器五类代码。MsmapMemory WebShell Generator把这件事变成菜单式流水线generator.py主入口驱动六层动态菜单语言 → 容器 → 组件 → 编码器 → 马型 → 密码支持参数直传config/dependency.py菜单与组合关系的配置定义gist/java/container/Tomcat、Spring、Resin、WebLogic、JDK 各容器挂钩模板gist/java/decoder/Base64 / XOR / RC4 / AES128 等解码器模块gist/java/stub/CMD、蚁剑、冰蝎、哥斯拉、JSPJS 马体 stubconfig/environment.py自动编译、字节码 Base64、生成加载脚本等进阶开关。选完参数后Msmap 可自动调用 javac 编译、将 class 文件 Base64 编码并额外产出shell.jsp加载脚本——选择 → 生成 → 编译 → 落马一次完成。五、快速上手三步生成你的第一匹内存马git clone https://gitcode.com/gh_mirrors/ms/msmap cd msmap python generator.py按提示依次选择即可例如Java → Tomcat → Valve → AES128 → AntSword → 密码也可以命令行一步到位python generator.py Java Tomcat Valve AES128 AntSword passwd⚠️ 注意各选项大小写敏感务必设置独一无二的密码WsFilter 使用加密编码器时密码需要与请求路径一致。六、实战效果蚁剑、冰蝎、哥斯拉一键接入内存马最大的痛点是怎么连。Msmap 的马体直接对齐主流管理客户端的编码器模板生成后导入 URL 密码即可使用客户端常用类型可选编码器蚁剑 AntSwordJSP / JSPJSdefault、aes_128_ecb_pkcs7_padding_md5、rc_4_sha256、xor_md5冰蝎 Behinderdefault_aes / default_xor_base64AES128 / XOR哥斯拉 GodzillaJAVA_AES_BASE64AES128蚁剑的编码器 JS 模板位于 extend/AntSword/encoder/按需导入管理端即可。七、防守视角如何检测与清除内存马对于防守方理解无文件 WebShell 的原理就是检测思路本身内存扫描扫描 JVM 堆中可疑的 Valve / Filter / Interceptor 对象关注类名异常或来源不明的实现类基线比对将容器管线中实际注册的组件列表与应用启动基线做对比多出者即重点怀疑对象运行时监控RASP监控异常的类加载、反射调用与defineClass行为在注入发生时告警紧急止损内存马随进程退出而消失重启是最直接的清除手段随后补漏洞、排查入口。总结Java 内存马是驻留在 JVM 内存的无文件 WebShell核心是类加载 组件挂钩常见挂点为 Tomcat Valve / Listener / WsFilter / Servlet、Spring Interceptor / Handler 等Msmap 作为开源内存马生成器把容器 - 组件 - 编码器 - 马体全部模块化一键生成、编译并可直连蚁剑、冰蝎、哥斯拉防守侧抓住三件套内存扫描、基线比对、RASP 监控。想进一步动手可参考项目中文文档 README_CN.md 中的完整功能清单与更多组合示例。【免费下载链接】msmapMsmap is a Memory WebShell Generator.项目地址: https://gitcode.com/gh_mirrors/ms/msmap创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考