ARTICLE · 1052579
Godzilla 内存马注入插件--MemShellParty
免责声明
本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!











项目地址:https://github.com/4ra1n/shell-analyzer
"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" -cp "C:\Program Files\Java\jdk1.8.0_181\lib\tools.jar;gui-0.1.jar" com.n1ar4.Application



运行:java -jar arthas-boot.jar
如果报错,是因为环境变量的问题,自己配置下就行,比如默认是java自己配置的环境变量,而Java自己配置的指向的是Jre不是Java,所以报错

输入1,会进入到1的类里面,获取类的信息

sc org.apache.catalina.*Valve*

比如想看这个类:
sc -d org.apache.http.web.handlers.uTvYS.OAuthValve

反编译看源码:jad org.apache.http.web.handlers.uTvYS.OAuthValve

不懂代码没关系,拿到AI里面问AI:

然后卸载Value比较麻烦,这里使用KMBA工具卸载
为什么会卸载麻烦呢?
因为恶意 Valve 通常被注入到 Tomcat 的 StandardPipeline 中。你需要先拿到 StandardContext 实例,进而获取其 Pipeline。
拿到 StandardContext 后,可以通过 OGNL 表达式获取其 Pipeline 对象。
由于 Pipeline 的 first 和 basic 属性是 protected 的,直接通过 OGNL 的 getter 可能会有问题(如 first 为 null 时会返回 basic),因此必须使用反射来精确获取
关键步骤:
构造 OGNL 表达式,通过反射访问 StandardPipeline 的 first 和 basic 字段。
遍历这些字段引用的 Valve 链,找到你确认的恶意 Valve 实例。
获取到恶意 Valve 的父 Pipeline 对象,调用其 removeValve(Valve valve) 方法将其移除。
如果内存马是通过动态代理(ProxyValve)注入的,情况会更复杂。你需要:
获取代理类的 InvocationHandler。
从 InvocationHandler 中提取出被代理的原始正常 Valve。
用原始 Valve 替换掉 Pipeline 中的代理对象
这里使用其他方式卸载
项目地址:https://github.com/y1shiny1shin/KMBA
KMBA (Kill Memshell By Arthas) 是一款基于 Arthas 的内存马查杀工具,它封装了复杂的操作,让查杀过程变得非常简单






