@@ -21,6 +21,76 @@ JNDI 注入、MySQL JDBC 反序列化、JRMP 反序列化等漏洞进行方便
2121 <img src =" ./img/main.zh-cn.png " />
2222</p >
2323
24+ ## 快速开始
25+
26+ > [ !WARNING]
27+ > 特别注意:我们默认只对 8011 端口进行了随机密码的登陆保护。其他端口可能存在被反制的风险,使用完相关功能后记得及时关闭相应端口
28+
29+ ### 方式一:Docker
30+
31+ 你可以通过 ` docker ` 一条命令启动 ` java-chains ` 项目(这也是推荐做法)
32+
33+ ``` shell
34+ docker run -d \
35+ --name java-chains \
36+ --restart=always \
37+ -p 8011:8011 \
38+ -p 58080:58080 \
39+ -p 50389:50389 \
40+ -p 50388:50388 \
41+ -p 13999:13999 \
42+ -p 3308:3308 \
43+ -p 11527:11527 \
44+ -p 50000:50000 \
45+ -e CHAINS_AUTH=true \
46+ -e CHAINS_PASS= \
47+ javachains/javachains:1.4.0
48+ ```
49+
50+ 可通过环境变量配置鉴权或密码;
51+
52+ ** CHAINS_AUTH** : true为开启鉴权,false为关闭鉴权,默认开启鉴权
53+
54+ ** CHAINS_PASS** : 指定web密码,若该变量为空则随机生成密码,默认随机生成密码
55+
56+ 备注:生成功能仅使用 ` 8011 ` 端口即可,其他端口为 ` exploit ` 模块使用
57+
58+ 使用以下命令从docker中获取随机生成的强密码
59+
60+ ``` shell
61+ docker logs $( docker ps | grep javachains/webchains | awk ' {print $1}' ) | grep -E ' password'
62+ ```
63+
64+ 输出示例
65+
66+ ``` text
67+ 11-12 06:59:53.301 INFO [main] c.a.c.w.c.SecurityConfig | | password: XSsWerJFGcCjB8FU
68+ ```
69+
70+ 登录页面:` http://your-ip:8011 `
71+
72+ ### 方式二:Jar包启动
73+
74+ ⚠️仅支持 JDK8,推荐使用 Temurin8/Zulu8 JDK
75+
76+ 使用 ` java -jar web-chains.jar ` 即可启动,每次启动后会打印出随机生成的密码
77+
78+ 默认监听 0.0.0.0 ,登录页面:` http://your-ip:8011 ` (使用这里的用户名密码登录)
79+
80+ 可通过环境变量设置web登录密码,例如:
81+
82+ Linux:
83+
84+ ``` bash
85+ export CHAINS_PASS=[your_password] && java -jar web-chains.jar
86+ ```
87+
88+ Windows:
89+
90+ ``` cmd
91+ set CHAINS_PASS=[your_password] && java -jar web-chains.jar
92+ ```
93+
2494## 模块介绍
2595
2696` Java-Chains ` 含有以下六大模块
@@ -34,56 +104,60 @@ JNDI 注入、MySQL JDBC 反序列化、JRMP 反序列化等漏洞进行方便
34104` Hessian2Payload ` : Hessian2 反序列化 Payload 生成
35105
36106` ShiroPayload ` : Shiro Payload 生成,在某些特殊环境下方便手动进行生成与测试
37- - 支持自定义 AES KEY
38- - 支持 AES GCM 模式
39- - 支持插入 Base64 混淆字符
107+
108+ - 支持自定义 AES KEY
109+ - 支持 AES GCM 模式
110+ - 支持插入 Base64 混淆字符
40111
41112` OtherPayload `
113+
42114- ` CharsetJarConvet ` : 生成 charsets.jar 包,适用于 SpringBoot 下文件上传 RCE 场景
43115- ` GroovyJarConvert ` : 生成 fastjson-groovy.jar 包,适用于 Fastjson 高版本下通过 Groovy 链加载特定格式 Jar 包实现 RCE)
44116- ` SnakeyamlJarConvert ` : 生成 snakeyaml.jar 包,适用于 SnakeYaml 通过 SPI 加载特定格式 Jar 包实现 RCE
45117
46118- ` JDBCPayload ` : JDBC Payload 生成
47- - H2 JDBC
48- - PostgresSQL
49- - ...
119+ - H2 JDBC
120+ - PostgresSQL
121+ - ...
50122
51123` ExpressionPayload ` : 表达式 Payload 生成,本质上是将表达式加载字节码模板中的字节码部分进行替换,推荐手动实现
124+
52125- ` BcelConvert ` : BCEL 格式字节码生成
53126- ` JsConvert ` : Oracle Nashorn JS 表达式加载字节码
54127- ` VelocityConvert ` : Velocity 通过 bcel 来加载字节码
55128- ...
56129
57130` BytecodePayload ` : 字节码生成
58- - 例如可生成执行命令字节码、Sleep字节码、DNSLog字节码,注入内存马字节码,回显字节码、中间件探测字节码、写文件字节码、下载文件字节码
59- - 支持自定义字节码版本
60- - 支持自定义字节码类名
61- - 支持生成 TemplatesImpl 字节码格式 - 实现 AbstractTranslet 接口
62- - 支持使用 Class-Obf 进行字节码混淆
131+
132+ - 例如可生成执行命令字节码、Sleep字节码、DNSLog字节码,注入内存马字节码,回显字节码、中间件探测字节码、写文件字节码、下载文件字节码
133+ - 支持自定义字节码版本
134+ - 支持自定义字节码类名
135+ - 支持生成 TemplatesImpl 字节码格式 - 实现 AbstractTranslet 接口
136+ - 支持使用 Class-Obf 进行字节码混淆
63137
64138` XStreamPayload ` : XStream 数据生成,暂未全面测试,部分Payload无法使用
65139
66140---
67141
68142本平台生成的 Payload 支持的一些混淆情况如下:
69143
70- | | JavaNativePayload | HessianPayload | Hessian2Payload |
71- | -----------------------| ----------------- | -------------- | --------------- |
72- | 随机集合脏数据填充 | ✅ | ✅ | ✅ |
73- | 垃圾类填充 | ✅ | ✅ | ✅ |
144+ | | JavaNativePayload | HessianPayload | Hessian2Payload |
145+ | ------------------------- | ------------------- | ---------------- | ----------------- |
146+ | 随机集合脏数据填充 | ✅ | ✅ | ✅ |
147+ | 垃圾类填充 | ✅ | ✅ | ✅ |
74148| UTF-8 Overlong Encoding | ✅ | ✅ | ✅ |
75- | TC_RESET 填充 | ✅ | ❌ | ❌ |
149+ | TC_RESET 填充 | ✅ | ❌ | ❌ |
76150
77151---
78152
79153注:若想通过 UserCustomByteArrayFromXXX 提供自定义的Java序列化字节流数据来进行混淆,那么目前暂不支持使用随机集合与垃圾类插入混淆,这与混淆的实现有关,具体支持情况如下:
80154
81155| | JavaNativePayload(自定义序列化场景) |
82- | ----------------------- | -- --------------------------------- |
83- | 随机集合混淆 | ❌ |
84- | 垃圾类插入 | ❌ |
85- | UTF-8 Overlong Encoding | ✅ |
86- | TC_RESET 填充 | ✅ |
156+ | ------------------------- | -----------------------------|
157+ | 随机集合混淆 | ❌ |
158+ | 垃圾类插入 | ❌ |
159+ | UTF-8 Overlong Encoding | ✅ |
160+ | TC_RESET 填充 | ✅ |
87161
88162### JNDI 注入利用模块 (JNDI)
89163
@@ -127,83 +201,12 @@ JNDI 注入、MySQL JDBC 反序列化、JRMP 反序列化等漏洞进行方便
127201
128202适用于 postgresql 远程加载 SpringBeanXML 文件等场景
129203
130-
131204### 小工具(Tools)
132205
133206底层调用了 SerializationDumper,能够解析序列化数据,并能实现手动更改类的 serialVersionUID 字段
134207
135208![ SerializationDumper.png] ( ./img/SerializationDumper.png )
136209
137- ## 快速开始
138-
139- ** 特别注意:我们默认只对 8011 端口进行了随机密码的登陆保护。其他端口可能存在被反制的风险,使用完相关功能后记得及时关闭相应端口
140- **
141-
142- ### 方式一:Docker
143-
144- 你可以通过 ` docker ` 一条命令启动 ` java-chains ` 项目(这也是推荐做法)
145-
146- ``` shell
147- docker run -d \
148- --name web-chains \
149- --restart=always \
150- -p 8011:8011 \
151- -p 58080:58080 \
152- -p 50389:50389 \
153- -p 50388:50388 \
154- -p 13999:13999 \
155- -p 3308:3308 \
156- -p 11527:11527 \
157- -p 50000:50000 \
158- -e CHAINS_AUTH=true \
159- -e CHAINS_PASS= \
160- javachains/webchains:1.3.1
161- ```
162-
163- 可通过环境变量配置鉴权或密码;
164-
165- ** CHAINS_AUTH** : true为开启鉴权,false为关闭鉴权,默认开启鉴权
166-
167- ** CHAINS_PASS** : 指定web密码,若该变量为空则随机生成密码,默认随机生成密码
168-
169- 备注:生成功能仅使用 ` 8011 ` 端口即可,其他端口为 ` exploit ` 模块使用
170-
171- 使用以下命令从docker中获取随机生成的强密码
172-
173- ``` shell
174- docker logs $( docker ps | grep javachains/webchains | awk ' {print $1}' ) | grep -E ' password'
175- ```
176-
177- 输出示例
178-
179- ``` text
180- 11-12 06:59:53.301 INFO [main] c.a.c.w.c.SecurityConfig | | password: XSsWerJFGcCjB8FU
181- ```
182-
183- 登录页面:` http://your-ip:8011 `
184-
185- ### 方式二:Jar包启动
186-
187- ⚠️仅支持 JDK8,推荐使用 Temurin8/Zulu8 JDK
188-
189- 使用 ` java -jar web-chains.jar ` 即可启动,每次启动后会打印出随机生成的密码
190-
191- 默认监听 0.0.0.0 ,登录页面:` http://your-ip:8011 ` (使用这里的用户名密码登录)
192-
193- 可通过环境变量设置web登录密码,例如:
194-
195- Linux:
196-
197- ``` bash
198- export CHAINS_PASS=[your_password] && java -jar web-chains.jar
199- ```
200-
201- Windows:
202-
203- ``` cmd
204- set CHAINS_PASS=[your_password] && java -jar web-chains.jar
205- ```
206-
207210## 详细使用
208211
209212Github Wiki: https://github.com/vulhub/java-chains/wiki
0 commit comments