1
- <h4 align =" right " >中文 | <strong ><a href =" ./README_EN.md " >English</a ></strong > </h4 >
1
+ <h4 align =" right " >中文 | <strong ><a href =" ./en/ README_EN.md " >English</a ></strong > </h4 >
2
2
<h1 align =" center " >Web Chains</h1 >
3
3
<div align =" center " >
4
4
<img alt =" downloads " src =" https://img.shields.io/github/downloads/java-chains/web-chains/total " />
9
9
</div >
10
10
</div >
11
11
12
- ` Web-Chains ` 项目,又名 ` Java-Chains ` 项目,我们站在巨人肩膀上,致力于打造最强的 ` Java ` 安全研究领域的瑞士军刀
12
+ ` Web-Chains ` /` Java-Chains ` 是一个 Java Payload 生成与漏洞利用 Web 平台,便于广大安全研究员快速生成 Java Payload,以及对
13
+ JNDI 注入、MySQL JDBC 反序列化、JRMP 反序列化等漏洞进行方便快速测试,能够在一定程度上提高测试效率。
14
+
15
+ > 我们站在巨人肩膀上,致力于打造最强的 Java 安全研究领域的瑞士军刀
13
16
14
17
<p align =" center " >
15
18
<img src =" ./img/main.png " />
16
19
</p >
17
20
18
- ## 介绍
19
-
20
- ` Web-Chains ` 含有六大模块:
21
-
22
- 1 . ` Generate ` : 生成模块
23
- - ` Java ` 反序列化原生 ` Payload ` 生成
24
- - ` Hessian1/2 ` 反序列化 ` Payload ` 生成
25
- - ` Hessian1 ` 支持生成 ` HessianServlet ` 格式反序列化数据
26
- - ` Shiro ` 数据生成(自定义 ` KEY ` 使用 ` GCM ` 混淆字符等)
27
- - ` AMF3 ` 数据生成(基于原生数据多种进阶组合)
28
- - ` XStream ` 数据生成(基于原生数据多种进阶组合)
29
- - ` BCEL ` 字节码生成(直接执行命令,内存马生成,回显生成,探测字节码,读写文件)
30
- - ` Class ` 字节码生成(直接执行命令,内存马生成,回显生成,探测字节码,读写文件)
31
- - 多种数据库 JDBC Payload 生成(` Derby ` | ` H2 ` | ` PostgreSql ` | ` Sqlite ` )
32
- - ` SnakeYAML/SpringBeanXML/Velocity/OGNL/MVEL/SPEL/JS/GROOVY `
33
- - Java反序列化、Hessian反序列化支持以下混淆方式:
34
- - 随机集合混淆
35
- - 垃圾类插入
36
- - 去除字节码符号信息
37
- - ` TC_RESET ` 填充,仅适用于Java反序列化
38
- - ` UTF-8 Overlong Encoding ` 混淆
39
- - 一些高级选项:
40
- - 自定义类名/定义字节码版本,支持使用 Class-Obf 进行字节码混淆
41
- - 选择 ` Commons Beanutils ` 链的多种 ` comparator ` 类型
42
- - 支持生成 ` TemplatesImpl ` 格式
43
- - 支持生成 ` SnakeYaml Jar ` 格式
44
- - 支持生成 ` Fastjson Groovy ` 格式
45
- - 支持生成 ` JavaWrapper ` 格式
46
- - 支持生成 ` charsets.jar ` 格式
47
- - 支持增强魔改版 ` JMG/JEG ` 格式 (java echo generator, java memshell generator)
48
- 2 . ` JNDI ` : JNDI 注入利用模块
49
- - ` JndiBasicPayload ` : LDAP 远程加载字节码
50
- - ` JndiDeserializationPayload ` : LDAP 中基于 javaSerializedData 字段实现的反序列化
51
- - ` JndiResourceRefPayload ` : LDAP 基于 BeanFactory 的 Tomcat EL、Groovy等利用
52
- - ` JndiReferencePayload ` : LDAP 基于其他 ObjectFactory 的Reference利用,例如各种DataSource JDBC利用
53
- - ` JndiRMIDeserializePayload ` : LDAP 高版本 JDK 绕过之RMI反序列化
54
- - ` JndiRefBypassPayload ` : LDAP 高版本 JDK 绕过之ReferenceBypass
55
- - ` JndiShowHandPayload ` : JNDI梭哈链,一键测试常规利用链,提高测试效率
56
- 3 . ` Fake MySQL `
57
- - ` FakeMysqlPayload ` : 经典 MySQL JDBC 反序列化利用姿势
58
- - ` FakeMysqlShowHandPayload ` : FakeMySQL梭哈链,一键测试常规反序列化链,提高测试效率
59
- 4 . ` JRMPListener `
60
- - 可配合 JRMPClient 反序列化链实现RMI低版本的绕过
61
- 5 . ` TCP Server `
62
- - 一个简易的 TCP Server,可以将生成的Payload文件挂载到TCP端口服务上
63
- - 适用于 Derby 反序列化 RCE 场景,可直接通过tcp端口获取反序列化数据
64
- 6 . ` HTTP Server `
65
- - 一个简易的HTTP服务器,将生成的Payload文件挂载到HTTP端口服务上
66
- - 适用于 postgresql 远程加载 SpringBeanXML 文件等场景
21
+ ## 模块介绍
22
+
23
+ ` Web-Chains ` 含有以下六大模块
24
+
25
+ ### 生成模块(Generate)
26
+
27
+ ` JavaNativePayload ` : Java 反序列化原生 Payload 生成
28
+
29
+ ` HessianPayload ` : Hessian1 反序列化 Payload 生成,并支持 HessianServlet 格式反序列化数据
30
+
31
+ ` Hessian2Payload ` : Hessian2 反序列化 Payload 生成
32
+
33
+ ` ShiroPayload ` : Shiro Payload 生成,在某些特殊环境下方便手动进行生成与测试
34
+ - 支持自定义 AES KEY
35
+ - 支持 AES GCM 模式
36
+ - 支持插入 Base64 混淆字符
37
+
38
+ ` OtherPayload `
39
+ - ` CharsetJarConvet ` : 生成 charsets.jar 包,适用于 SpringBoot 下文件上传 RCE 场景
40
+ - ` GroovyJarConvert ` : 生成 fastjson-groovy.jar 包,适用于 Fastjson 高版本下通过 Groovy 链加载特定格式 Jar 包实现 RCE)
41
+ - ` SnakeyamlJarConvert ` : 生成 snakeyaml.jar 包,适用于 SnakeYaml 通过 SPI 加载特定格式 Jar 包实现 RCE
42
+
43
+ - ` JDBCPayload ` : JDBC Payload 生成
44
+ - H2 JDBC
45
+ - PostgresSQL
46
+ - ...
47
+
48
+ ` ExpressionPayload ` : 表达式 Payload 生成,本质上是将表达式加载字节码模板中的字节码部分进行替换,推荐手动实现
49
+ - ` BcelConvert ` : BCEL 格式字节码生成
50
+ - ` JsConvert ` : Oracle Nashorn JS 表达式加载字节码
51
+ - ` VelocityConvert ` : Velocity 通过 bcel 来加载字节码
52
+ - ...
53
+
54
+ ` BytecodePayload ` : 字节码生成
55
+ - 例如可生成执行命令字节码、Sleep字节码、DNSLog字节码,注入内存马字节码,回显字节码、中间件探测字节码、写文件字节码、下载文件字节码
56
+ - 支持自定义字节码版本
57
+ - 支持自定义字节码类名
58
+ - 支持生成 TemplatesImpl 字节码格式 - 实现 AbstractTranslet 接口
59
+ - 支持使用 Class-Obf 进行字节码混淆
60
+
61
+ ` XStreamPayload ` : XStream 数据生成,暂未全面测试,部分Payload无法使用
62
+
63
+ ---
64
+
65
+ 本平台生成的 Payload 支持的一些混淆情况如下:
66
+
67
+ | | JavaNativePayload | HessianPayload | Hessian2Payload |
68
+ | -----------------------| ----------------- | -------------- | --------------- |
69
+ | 随机集合脏数据填充 | ✅ | ✅ | ✅ |
70
+ | 垃圾类填充 | ✅ | ✅ | ✅ |
71
+ | UTF-8 Overlong Encoding | ✅ | ✅ | ✅ |
72
+ | TC_RESET 填充 | ✅ | ❌ | ❌ |
73
+
74
+ ---
75
+
76
+ 注:若想通过 UserCustomByteArrayFromXXX 提供自定义的Java序列化字节流数据来进行混淆,那么目前暂不支持使用随机集合与垃圾类插入混淆,这与混淆的实现有关,具体支持情况如下:
77
+
78
+ | | JavaNativePayload(自定义序列化场景) |
79
+ | ----------------------- | ----------------------------------- |
80
+ | 随机集合混淆 | ❌ |
81
+ | 垃圾类插入 | ❌ |
82
+ | UTF-8 Overlong Encoding | ✅ |
83
+ | TC_RESET 填充 | ✅ |
84
+
85
+ ### JNDI 注入利用模块 (JNDI)
86
+
87
+ 支持六种利用姿势,外加一个便于一键测试常见链的 ShowHand 链
88
+
89
+ ` JndiBasicPayload ` : LDAP 远程加载字节码
90
+
91
+ ` JndiDeserializationPayload ` : LDAP 中基于 javaSerializedData 字段实现的反序列化
92
+
93
+ ` JndiResourceRefPayload ` : LDAP 基于 BeanFactory 的 Tomcat EL、Groovy等利用
94
+
95
+ ` JndiReferencePayload ` : LDAP 基于其他 ObjectFactory 的Reference利用,例如各种DataSource JDBC利用
96
+
97
+ ` JndiRMIDeserializePayload ` : LDAP 高版本 JDK 绕过之RMI反序列化
98
+
99
+ ` JndiRefBypassPayload ` : LDAP 高版本 JDK 绕过之ReferenceBypass
100
+
101
+ ` JndiShowHandPayload ` : JNDI梭哈链,一键测试常规利用链,提高测试效率
102
+
103
+ ### Mysql JDBC 反序列化利用模块 (Fake MySQL)
104
+
105
+ ` FakeMysqlPayload ` : 经典 MySQL JDBC 反序列化利用姿势
106
+
107
+ ` FakeMysqlShowHandPayload ` : FakeMySQL梭哈链,一键测试常规反序列化链,提高测试效率
108
+
109
+ ### JRMP 反序列化利用模块 (JRMPListener)
110
+
111
+ 可配合 JRMPClient 反序列化链实现RMI低版本的绕过
112
+
113
+ ### TCP Server
114
+
115
+ 一个简易的 TCP Server,可以将生成的Payload文件挂载到TCP端口服务上,访问该端口即可返回指定内容
116
+
117
+ 适用于 Derby 反序列化 RCE 场景,可直接通过tcp端口获取反序列化数据
118
+
119
+ ### HTTP Server
120
+
121
+ 一个简易的HTTP服务器,将生成的Payload文件挂载到HTTP端口服务上,访问指定端口即可返回指定内容
122
+
123
+ 适用于 postgresql 远程加载 SpringBeanXML 文件等场景
124
+
125
+
126
+ ### 小工具(Tools)
127
+
128
+ 底层调用了 SerializationDumper,能够解析序列化数据,并能实现手动更改类的 serialVersionUID 字段
129
+
130
+ ![ SerializationDumper.png] ( ./img/SerializationDumper.png )
67
131
68
132
## 快速开始
69
133
70
- ** 特别注意:我们只对 8011 端口进行了保护,需要登陆后访问,其他端口可能存在被反制的风险,请自行注意**
134
+ ** 特别注意:我们默认只对 8011 端口进行了随机密码的登陆保护。其他端口可能存在被反制的风险,使用完相关功能后记得及时关闭相应端口
135
+ **
71
136
72
137
### 方式一:Docker
73
138
@@ -87,7 +152,7 @@ docker run -d \
87
152
-p 50000:50000 \
88
153
-e CHAINS_AUTH=true \
89
154
-e CHAINS_PASS= \
90
- javachains/webchains:1.2.4
155
+ javachains/webchains:1.3.0
91
156
```
92
157
93
158
可通过环境变量配置鉴权或密码;
@@ -112,21 +177,24 @@ docker logs $(docker ps | grep javachains/webchains | awk '{print $1}') | grep -
112
177
113
178
登录页面:` http://your-ip:8011 `
114
179
115
-
116
180
### 方式二:Jar包启动
117
181
182
+ ⚠️仅支持 JDK8,推荐使用 Temurin8/Zulu8 JDK
183
+
118
184
使用 ` java -jar web-chains.jar ` 即可启动,每次启动后会打印出随机生成的密码
119
185
120
186
默认监听 0.0.0.0 ,登录页面:` http://your-ip:8011 ` (使用这里的用户名密码登录)
121
187
122
188
可通过环境变量设置web登录密码,例如:
123
189
124
190
Linux:
191
+
125
192
``` bash
126
193
export CHAINS_PASS=[your_password] && java -jar web-chains.jar
127
194
```
128
195
129
196
Windows:
197
+
130
198
``` cmd
131
199
set CHAINS_PASS=[your_password] && java -jar web-chains.jar
132
200
```
@@ -135,6 +203,28 @@ set CHAINS_PASS=[your_password] && java -jar web-chains.jar
135
203
136
204
详细使用文档:https://www.yuque.com/shenjingwa-leuvd/wpqdhf/eekyvau9fcblzzt0
137
205
206
+ ## 其他
207
+
208
+ 本工具的优势:
209
+
210
+ 1 . 相较于命令行的各种工具,Web 界面上的操作更加简单易用,能够在很方便的生成 JNDI 注入、MySQL JDBC 等测试 Payload
211
+ 2 . 将各种 Payload 进行解耦与复用,前端动态渲染参数输入框,方便拓展与维护
212
+ 3 . 搜集整理并覆盖了较为全面的 Java、Hessian 等反序列化 Payload,集成了各种小 trick 以及混淆等姿势
213
+
214
+ 劣势(同时也是待改进的点):
215
+
216
+ 1 . 生成的某些冷门 Payload 组合无法正常使用。由于解耦会导致组合的复杂度上升,并且目前无法覆盖测试所有 Payload
217
+ 组合。针对该情况,目前的缓解措施是通过 Payload 输出框上方的有个下拉选项【预设链】,提供了测试好的链子组合,可以提供一些参考。
218
+ 生成冷门 Payload 组合建议提前测试一下,若发现无法正常运行的 Payload 可以提交 Issues 反馈
219
+ 2 . 由于需要各种依赖去生成Payload,所以项目的 jar 包的体积较大 (200+MB)
220
+ 3 . 比较冷门的以及实战价值比较低的 Payload 暂未集成
221
+
222
+ 常见问题:
223
+
224
+ 问:为什么用 Web,而不是 Java GUI?
225
+
226
+ 答:各有优势,但是我认为 Web 适用场景较广,主要是很方便的在服务器上操作生成 JNDI 注入等 Payload
227
+
138
228
## 更新内容
139
229
140
230
[ CHANGELOG.md] ( ./CHANGELOG.md )
@@ -163,6 +253,7 @@ set CHAINS_PASS=[your_password] && java -jar web-chains.jar
163
253
- https://github.dev/LxxxSec/CTF-Java-Gadget
164
254
- https://github.com/pen4uin/java-memshell-generator
165
255
- https://github.com/pen4uin/java-echo-generator
256
+ - https://github.com/NickstaDB/SerializationDumper
166
257
- https://xz.aliyun.com/t/5381
167
258
- http://rui0.cn/archives/1408
168
259
0 commit comments