Skip to content

Commit 0bf75f2

Browse files
committed
v1.3.0
1 parent f53b1ac commit 0bf75f2

12 files changed

+183
-117
lines changed

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
## 1.3.0
2+
3+
- [功能] 新增 [SerializationDumper](https://github.com/NickstaDB/SerializationDumper) 解析Java序列化数据,并自定义修改任意类
4+
SUID 等功能
5+
- [功能] 开放 Chains 插件编写,参考:https://github.com/Java-Chains/chains-plugin-demo ,前端支持reload重加载插件
6+
- [功能] 新增 Hessian2ToStringPayload,通过 except 可触发toString链
7+
- [功能] 前端提供展示所有 Payload、Gadget 基础信息
8+
- [功能] 新增 CommonsBeanutils5 Gadget,适用于 cb 1.10 版本
9+
- [功能] 新增 FakeMySQLReadPayload 读文件利用,同时兼容 fileread_/etc/passwd 格式 ,参考 https://github.com/4ra1n/mysql-fake-server
10+
- [功能] Generate 生成模块提供 URL Encoding 编码选项
11+
- [功能] gadget 注解中新增 preTags 字段,可用于指定前面的链
12+
- [功能] 同步更新 [Class-Obf](https://github.com/jar-analyzer/class-obf) v1.4.0 版本
13+
- [优化] JNDI、JRMP 等模块若端口未开放则会进行提醒
14+
- [优化] 前端图标展示
15+
- [优化] 整理后端代码
16+
- [Bugfix] 修复Groovy生成Jar的问题。现在可以通过 OtherPayload -> GroovyJarConvert 中生成 Fastjson Groovy Jar
17+
118
## 1.2.4
219

320
- [功能] 同步更新 Class-Obf v1.3.1 版本 (https://github.com/jar-analyzer/class-obf) @4ra1n

README.md

Lines changed: 145 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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>
22
<h1 align="center">Web Chains</h1>
33
<div align="center">
44
<img alt="downloads" src="https://img.shields.io/github/downloads/java-chains/web-chains/total"/>
@@ -9,65 +9,130 @@
99
</div>
1010
</div>
1111

12-
`Web-Chains` 项目,又名 `Java-Chains` 项目,我们站在巨人肩膀上,致力于打造最强的 `Java` 安全研究领域的瑞士军刀
12+
`Web-Chains`/`Java-Chains` 是一个 Java Payload 生成与漏洞利用 Web 平台,便于广大安全研究员快速生成 Java Payload,以及对
13+
JNDI 注入、MySQL JDBC 反序列化、JRMP 反序列化等漏洞进行方便快速测试,能够在一定程度上提高测试效率。
14+
15+
> 我们站在巨人肩膀上,致力于打造最强的 Java 安全研究领域的瑞士军刀
1316
1417
<p align="center">
1518
<img src="./img/main.png" />
1619
</p>
1720

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)
67131

68132
## 快速开始
69133

70-
**特别注意:我们只对 8011 端口进行了保护,需要登陆后访问,其他端口可能存在被反制的风险,请自行注意**
134+
**特别注意:我们默认只对 8011 端口进行了随机密码的登陆保护。其他端口可能存在被反制的风险,使用完相关功能后记得及时关闭相应端口
135+
**
71136

72137
### 方式一:Docker
73138

@@ -87,7 +152,7 @@ docker run -d \
87152
-p 50000:50000 \
88153
-e CHAINS_AUTH=true \
89154
-e CHAINS_PASS= \
90-
javachains/webchains:1.2.4
155+
javachains/webchains:1.3.0
91156
```
92157

93158
可通过环境变量配置鉴权或密码;
@@ -112,21 +177,24 @@ docker logs $(docker ps | grep javachains/webchains | awk '{print $1}') | grep -
112177

113178
登录页面:`http://your-ip:8011`
114179

115-
116180
### 方式二:Jar包启动
117181

182+
⚠️仅支持 JDK8,推荐使用 Temurin8/Zulu8 JDK
183+
118184
使用 `java -jar web-chains.jar` 即可启动,每次启动后会打印出随机生成的密码
119185

120186
默认监听 0.0.0.0 ,登录页面:`http://your-ip:8011` (使用这里的用户名密码登录)
121187

122188
可通过环境变量设置web登录密码,例如:
123189

124190
Linux:
191+
125192
```bash
126193
export CHAINS_PASS=[your_password] && java -jar web-chains.jar
127194
```
128195

129196
Windows:
197+
130198
```cmd
131199
set CHAINS_PASS=[your_password] && java -jar web-chains.jar
132200
```
@@ -135,6 +203,28 @@ set CHAINS_PASS=[your_password] && java -jar web-chains.jar
135203

136204
详细使用文档:https://www.yuque.com/shenjingwa-leuvd/wpqdhf/eekyvau9fcblzzt0
137205

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+
138228
## 更新内容
139229

140230
[CHANGELOG.md](./CHANGELOG.md)
@@ -163,6 +253,7 @@ set CHAINS_PASS=[your_password] && java -jar web-chains.jar
163253
- https://github.dev/LxxxSec/CTF-Java-Gadget
164254
- https://github.com/pen4uin/java-memshell-generator
165255
- https://github.com/pen4uin/java-echo-generator
256+
- https://github.com/NickstaDB/SerializationDumper
166257
- https://xz.aliyun.com/t/5381
167258
- http://rui0.cn/archives/1408
168259

CHANGELOG_EN.md renamed to en/CHANGELOG_EN.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
## 1.3.0
2+
3+
- [Feature] Added [SerializationDumper](https://github.com/NickstaDB/SerializationDumper) for parsing Java serialized data, enabling custom modification of class SUIDs, etc.
4+
- [Feature] Enabled Chains plugin development. See: https://github.com/Java-Chains/chains-plugin-demo. The frontend supports plugin reloading.
5+
- [Feature] Added Hessian2ToStringPayload; a toString chain can be triggered via `except`.
6+
- [Feature] The frontend now displays basic information for all Payloads and Gadgets.
7+
- [Feature] Added CommonsBeanutils5 Gadget, suitable for cb version 1.10.
8+
- [Feature] Added FakeMySQLReadPayload for file reading exploitation, compatible with `fileread_/etc/passwd` format. See https://github.com/4ra1n/mysql-fake-server.
9+
- [Feature] The Generate module now offers a URL Encoding option.
10+
- [Feature] Added the `preTags` field in gadget annotations, which can be used to specify preceding chains.
11+
- [Feature] Synchronously updated [Class-Obf](https://github.com/jar-analyzer/class-obf) to version v1.4.0.
12+
- [Improvement] JNDI, JRMP, etc. modules will now provide a warning if the port is not open.
13+
- [Improvement] Improved frontend icon display.
14+
- [Improvement] Refactored backend code.
15+
- [Bugfix] Fixed the Groovy Jar generation issue. Fastjson Groovy Jars can now be generated through OtherPayload -> GroovyJarConvert.
16+
17+
118
## 1.2.4
219

320
- [Feature] Synchronized update to Class-Obf v1.3.1 (https://github.com/jar-analyzer/class-obf) @4ra1n

README_EN.md renamed to en/README_EN.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
<img alt="release" src="https://img.shields.io/github/v/release/java-chains/web-chains"/>
66
<img alt="GitHub Stars" src="https://img.shields.io/github/stars/Java-Chains/web-chains?color=success"/>
77
<div align="center">
8-
<img src="img/logo.png" width="60" alt="center">
8+
<img src="../img/logo.png" width="60" alt="center">
99
</div>
1010
</div>
1111

1212
The `Web-Chains` project, also known as the `Java-Chains` project, stands on the shoulders of giants and is committed to
1313
building the Swiss Army knife of the strongest `Java` security research
1414

1515
<p align="center">
16-
<img src="./img/main_EN.png" />
16+
<img src="../img/main_EN.png" />
1717
</p>
1818

1919
## 介绍
@@ -90,7 +90,7 @@ docker run -d \
9090
-p 50000:50000 \
9191
-e CHAINS_AUTH=true \
9292
-e CHAINS_PASS= \
93-
javachains/webchains:1.2.4
93+
javachains/webchains:1.3.0
9494
```
9595

9696
Authentication and password can be configured via environment variables:
@@ -160,6 +160,7 @@ Acknowledgments:
160160
- https://github.dev/LxxxSec/CTF-Java-Gadget
161161
- https://github.com/pen4uin/java-memshell-generator
162162
- https://github.com/pen4uin/java-echo-generator
163+
- https://github.com/NickstaDB/SerializationDumper
163164
- https://xz.aliyun.com/t/5381
164165
- http://rui0.cn/archives/1408
165166

img/SerializationDumper.png

437 KB
Loading

img/group.png

-359 KB
Binary file not shown.

img/main.png

67.2 KB
Loading

img/main_EN.png

44 KB
Loading

img/zanShang.jpg

-131 KB
Binary file not shown.

old/Dockerfile

Lines changed: 0 additions & 46 deletions
This file was deleted.

old/README.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)