夜雨聆风学习资料网

ARTICLE · 1052579

Godzilla 内存马注入插件--MemShellParty

Godzilla 内存马注入插件--MemShellParty

免责声明

本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!

项目地址
项目地址:https://github.com/1ucky7/memShellParty-Godzilla
部署
1.下载jar包
2.添加插件
功能
注入内存马
中间件:
类型:
shelltype:
列出组件
只支持filter/listener
简单使用
之后测试连接:
成功连接
可执行其他操作
如何发现

项目地址:https://github.com/4ra1n/shell-analyzer

启动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

之后点击右侧的删除就可以了
然后,尴尬了,删除不了了
只能使用阿里巴巴的工具:https://github.com/alibaba/arthas

运行:java -jar arthas-boot.jar

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

目前只有一个java应用

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

列出所有value接口的已加载类:

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 的内存马查杀工具,它封装了复杂的操作,让查杀过程变得非常简单

Web模式:java -jar KMBA.jar
这里没有打开,不知道什么原因
CLI模式:java -jar KMBA.jar cli <pid> <command>
PID如何获取:
查看valve类:java -jar KMBA.jar cli 9032 -l valve
反编译类:java -jar KMBA.jar cli 9032 -jad org.apache.http.web.handlers.uTvYS.OAuthValve
卸载类:java -jar KMBA.jar cli 9032 -u valve org.apache.http.web.handlers.uTvYS.OAuthValve
可以发现恶意类已经没了
内存马也已经无法连接
环境正常
PS:这里遇到一个小问题,这里做了两次实验,第一次环境可能崩了,不管怎么重启,环境都无法打开,第二天重新做实验,竟然能重新打开,也能正常删除,不确定第一次实验是哪里出问题了(所以可能需要各位去实验下了)
补充信息
如何觉得有局限性(想自己DIY+使用其他内存马工具),可移步此项目:
https://github.com/ReaJason/MemShellParty

相关学习资料