尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Msmap AgentFileless深度解析:Windows与Linux无文件Java Agent注入完整指南
Msmap AgentFileless深度解析Windows与Linux无文件Java Agent注入完整指南【免费下载链接】msmapMsmap is a Memory WebShell Generator.项目地址: https://gitcode.com/gh_mirrors/ms/msmapMsmap 是一款开源的Java 内存马Memory WebShell生成器其中的AgentFileless模式实现了真正的无文件 Java Agent 注入全程不需要在磁盘上放置 jar 包、不需要-javaagent启动参数而是在运行时把 Instrumentation 代理对象直接构造在内存里再重定义已加载的核心类让 Tomcat 等 Java 容器原地长出一个后门。本文将带你彻底看懂 Msmap AgentFileless 在Windows 与 Linux两大平台上的实现原理与使用方法面向新手、代码量极少 一、什么是AgentFileless无文件注入传统 Java 内存马的植入思路一般分两派派系原理局限性进程内注入RCE 后直接操作容器内部结构Valve / Filter / Listener 等强依赖具体容器类型与版本不够通用Java Agent 注入借助 Instrumentation.redefineClasses 重定义已加载类传统方式需要加载 agentjar 文件 启动参数AgentFileless 恰好取两者之长运行时在内存中伪造出一个合法的 Instrumentation 对象并 attach 到自身 JVM 进程用redefineClasses替换已加载的javax.servlet.http.HttpServlet类后门逻辑被埋进service()方法入口之后每个 HTTP 请求都会先经过后门判断。 核心亮点注入目标不是某个具体的 webapp而是容器核心类HttpServlet。这意味着 Tomcat及使用该 Servlet API 的容器下的所有 Servlet 都受影响注入点通用、覆盖面广且全程不落盘、不重启。相关源码位置供进阶阅读AgentFileless 注入器模板config/dependency.pyAGENTFILELESS 变量内含 Windows/Linux 双平台逻辑被后门化的 HttpServlet 模板gist/java/container/jdk/javax.py组装、编译、编码的生成器入口generator.py二、三步走从生成到生效的完整链路生成注入器执行一条命令见第四节generator.py会写出target/AgentFileless.java自动编译后把 class 字节码进行 Base64 编码并同时产出shell.jsp/shell.jspx投递脚本对应generator.py中的b64file()逻辑投递到目标 JVM把生成的 JSP 上传到目标站点并访问一次。JSP 内部定义了一个加载器类负责把 Base64 解码、通过ClassLoader.defineClass定义 AgentFileless 类并实例化内存中自附加并重定义AgentFileless 的静态构造块随即触发获取 Unsafe → 开启自附加 → 获得 Instrumentation → redefineClasses(HttpServlet)后门永久生效直到 JVM 重启。三、核心原理Windows 与 Linux 的两条不同路径redefine()方法根据os.name自动分流两个平台走的是完全不同的技术路线 3.1 WindowsUnsafe 翻开关 Attach API打开自附加开关JDK 默认jdk.attach.allowAttachSelffalse禁止进程 attach 自己。代码先setProperty再用Unsafe.staticFieldOffset putBoolean强制改写sun.tools.attach.HotSpotVirtualMachine.ALLOW_ATTACH_SELF静态字段为 trueenableAttachSelf加载 attach 实现类优先尝试从类路径加载sun.tools.attach.WindowsVirtualMachine有 tools.jar 时找不到时直接反序列化内置的字节码数组defineClass(ByteBuffer)在内存中定义该类——依然不需要任何外部文件完成注入把目标类名javax.servlet.http.HttpServlet和类字节码写入静态字段并根据 x86/x64 设置pointerLength为 4/8最后调用其work()方法。内部通过 JVM Attach 机制拿到 Instrumentation执行redefineClasses完成替换。3.2 Linux/proc/self/mem 壳码 JNI_GetCreatedJavaVMsLinux 路线更硬核——完全绕开 Attach API直接操作自身进程的内存解析/proc/self/maps找到libjava.so与libjvm.so的映射基址解析 ELF 符号表遍历.symtab节区定位Java_java_io_RandomAccessFile_length当作一段可写的临时执行区和JNI_GetCreatedJavaVMs的真实地址壳码替换执行把一小段 x86_64 壳码栈对齐 调用 JNI_GetCreatedJavaVMs通过/proc/self/mem写入前者所在内存并借道执行拿到 JVMTI 环境指针后立即恢复原始字节不留痕迹伪造 InstrumentationImpl用 Unsafe 分配 4096 字节伪造一个 JVMTI agent 结构体在偏移 8 处写入 jvmtiEnv 指针再反射调用sun.instrument.InstrumentationImpl的私有构造器得到一个合法的 Instrumentation 对象redefineClasses替换 HttpServlet注入完成。⚠️ Linux 实现依赖内存布局与符号表结构因此 Msmap 默认支持Linux Tomcat 8/9其他版本需按进阶指南自行适配macOS 暂不支持。四、快速上手AgentFileless 生成器使用步骤先获取项目如需要 clone 仓库git clone https://gitcode.com/gh_mirrors/ms/msmap cd msmap python generator.py交互式菜单路径Java → JDK → JavaX → 编码器 → WebShell 类型 → 密码也支持命令行一步到位python generator.py Java JDK JavaX XOR AntSword passwd参数位含义可选项1语言Java2容器JDKAgentFileless 模式入口3组件JavaX注入 HttpServlet4编码器RAW / Base64 / XOR / AES128 / RC45WebShell 类型CMD / AntSword / JSPJS / Godzilla / Behinder随编码器而定6密码任意字符串需与客户端保持一致进阶配置在config/environment.py中auto_build自动调用 javac 编译b64_class对类字节码做 Base64 编码generate_script生成 shell.jsp / shell.jspx 投递脚本java_compiler_path编译器绝对路径各 WebShell 类型工作方式一览CMD / SH解码后按os.name分别执行cmd.exe /c或/bin/sh -c见gist/java/stub/cmd.py一套代码通吃 Windows 与 Linux用浏览器即可快速验证回显AntSword / JSPJSpayload 是 Base64 编码的 JSP接收后在内存中defineClass动态加载见gist/java/stub/antsword.py客户端选择对应编码如xor_md5、rc_4_sha256、aes_128_ecb_pkcs7_padding_md5脚本位于extend/AntSword/encoder/即可连接GodzillaAES128 编码对应 JAVA_AES_BASE64 类型哥斯拉客户端直连。五、AgentFileless 与传统注入方式对比维度AgentFileless本文方案进程内注入Valve/Filter 等磁盘文件❌ 无 jar、无 class 落盘❌ 无容器依赖低依赖 JDK 自身 attach/JNI 机制跨容器通用高依赖具体容器内部结构是否需要重启❌ 热注入❌ 热注入存活周期JVM 进程存活期间JVM 进程存活期间隐蔽性无 jar、无-javaagent参数、无新类文件加载痕迹视注入点而定六、检测与防御要点蓝队视角无文件注入的痕迹恰恰藏在运行时行为里内存扫描枚举 JVM 中已加载类对比HttpServlet等方法体是否与标准库一致识别异常 Base64 动态加载字节码的类敏感行为监控Windows 监控 jvm.dll 的异常自附加调用Linux 监控/proc/pid/mem的异常写入本文 3.2 节的核心动作类重定义审计JVM 层面可开启对 redefineClasses 的校验与日志核心类被重定义属于高危事件基线比对定期比对内存中核心类字节码哈希与干净基线发现篡改即可告警。七、常见问题 FAQQ需要什么 JDK 版本注入逻辑依赖sun.misc.Unsafe、sun.instrument.InstrumentationImpl及 JDK attach 机制主要面向 JDK 8/11 环境Msmap 默认适配 Linux Tomcat 8/9更高版本 JDK 限制更多需要额外适配。Q服务器重启后门还在吗不在。内存马只存活于 JVM 进程内存中重启即消失——这也是内存马名称的由来。Q客户端类型和编码器必须严格对应吗是的。如 AntSword 的 XOR 编码对应xor_md5AES128 对应aes_128_ecb_pkcs7_padding_md5Godzilla 的 AES128 对应JAVA_AES_BASE64且密码必须与生成时设置的一致选项大小写敏感。一句话总结Msmap AgentFileless 运行时自附加 内存类重定义用一条命令同时打通了 Windows 与 Linux 平台的无文件 Java Agent 注入链路是研究 Java 内存马原理与蓝队防御的优秀开源样本 【免费下载链接】msmapMsmap is a Memory WebShell Generator.项目地址: https://gitcode.com/gh_mirrors/ms/msmap创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

BetterGI 实测两周:原神日常委托、钓鱼、刷秘境,哪些事能交给它

BetterGI 实测两周:原神日常委托、钓鱼、刷秘境,哪些事能交给它

BetterGI 实测两周:原神日常委托、钓鱼、刷秘境,哪些事能交给它 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一…

📅 2026/10/7 7:12:13
Erlang版本管理终极指南:用erlang.mk内置Kerl一条命令搞定所有OTP版本

Erlang版本管理终极指南:用erlang.mk内置Kerl一条命令搞定所有OTP版本

Erlang版本管理终极指南:用erlang.mk内置Kerl一条命令搞定所有OTP版本 【免费下载链接】erlang.mk A build tool for Erlang that just works. 项目地址: https://gitcode.com/gh_mirrors/er/erlang.mk erlang.mk 是一款 "开箱即用" 的 Erlang 构建…

📅 2026/9/14 7:08:00
OxCaml 寄存器分配器完全指南:IRC、linscan、greedy-inspired 三种策略对比实战

OxCaml 寄存器分配器完全指南:IRC、linscan、greedy-inspired 三种策略对比实战

OxCaml 寄存器分配器完全指南:IRC、linscan、greedy-inspired 三种策略对比实战 【免费下载链接】oxcaml OCaml - Oxidized! 项目地址: https://gitcode.com/gh_mirrors/fl/oxcaml 在 oxcaml(OCaml - Oxidized!) 新一代编译器的 CFG 后…

📅 2026/9/25 5:22:20
MORE NEWS

更多资讯

📰

Redis Hash类型实战:从对象存储到分布式锁的全面指南

开头先聊个实际场景。你有一段用户信息要缓存,最省事的做法是什么?很多人会直接SET user:1001 {"name":"张三","age":25},把整个 JSON 字符串丢进去。等想改其中一个字段的时候,整条数据取出来、反…

📰

图书管理系统详细设计:从表结构到借阅状态机的完整实战拆解

简介:这是一份面向软件工程课程设计与毕业设计场景的图书管理系统详细设计说明书,适合需要学习规范编写详细设计文档或构建图书管理系统的学生、开发者参考。文档遵循详细设计阶段标准结构,引言部分明确了编写目的、背景、术语定义及参考资料…

📰

MySQL OCP 908认证备考:英文题库高频考点与实战操作

简介:《MySQL OCP 908 英文题库》是一份面向数据库管理员、开发及运维工程师的备考资料,聚焦MySQL 8.0数据库管理与优化核心考点,涵盖服务器配置、故障排查、性能优化、备份恢复、GTID复制、权限管理及高可用架构等主题。资源以英文试题及解析…

📰

配资股票配资系统源码:账户模型与风控撮合实现路径

简介:这份配资股票配资系统源码面向金融类网站开发者、PHP后端工程师及有搭建股票配资平台需求的团队,提供一套可直接部署的完整解决方案,帮助解决从零开发配资业务系统周期长、模块缺失的问题。资源包共5738个文件,压缩后约59.76…

📰

Python报错ModuleNotFoundError: datetime?从模块机制到环境隔离的完整排查指南

前几天有个刚入门Python的朋友给我发了张截图,说他在终端执行pip install装包,结果命令没跑成,反而弹出来一串红字,其中一行写着ModuleNotFoundError: No module named datetime。他问我:是不是我的Python环境缺了什么…

📰

螺栓销钉缺失检测:1209张VOC数据集与YOLOv8训练实践

简介:输电线路螺栓销钉缺失检测图像数据集专注电力设施智能巡检场景,面向计算机视觉研究者与电力运维开发人员,旨在解决销钉缺失这一高危隐患的自动识别问题。数据集共2000个文件、约89.52MB,包含791张高清JPEG巡检图像及1209个PA…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬