Skip to content

Commit def25b1

Browse files
committed
update java-chains website
1 parent 560a96d commit def25b1

File tree

3 files changed

+3
-445
lines changed

3 files changed

+3
-445
lines changed

README.md

Lines changed: 2 additions & 234 deletions
Original file line numberDiff line numberDiff line change
@@ -23,241 +23,9 @@ extent.
2323
<img src="./img/main.png" />
2424
</p>
2525

26-
## Quick Start
26+
## Get started quickly
2727

28-
> [!WARNING]
29-
> Special Note: We only provide random password login protection for port 8011 by default. Other ports may have the risk
30-
> of being counter-exploited. Please remember to close the corresponding ports after using the relevant functions.
31-
32-
### Method 1: Docker
33-
34-
You can start the `java-chains` project with a single `docker` command (recommended approach).
35-
36-
```shell
37-
docker run -d \
38-
--name java-chains \
39-
--restart=always \
40-
-p 8011:8011 \
41-
-p 58080:58080 \
42-
-p 50389:50389 \
43-
-p 50388:50388 \
44-
-p 13999:13999 \
45-
-p 3308:3308 \
46-
-p 11527:11527 \
47-
-p 50000:50000 \
48-
-e CHAINS_AUTH=true \
49-
-e CHAINS_PASS= \
50-
javachains/javachains:1.4.0
51-
```
52-
53-
Authentication or password can be configured through environment variables;
54-
55-
**CHAINS_AUTH**: `true` to enable authentication, `false` to disable authentication. Authentication is enabled by
56-
default.
57-
58-
**CHAINS_PASS**: Specify the web password. If this variable is empty, a random password will be generated. Random
59-
password generation is the default.
60-
61-
Note: Only port `8011` is required for the generation function. Other ports are used by the `exploit` module.
62-
63-
Use the following command to retrieve the randomly generated strong password from Docker:
64-
65-
```shell
66-
docker logs $(docker ps | grep javachains/javachains | awk '{print $1}') | grep -E 'password'
67-
```
68-
69-
Output example:
70-
71-
```text
72-
11-12 06:59:53.301 INFO [main] c.a.c.w.c.SecurityConfig | | password: XSsWerJFGcCjB8FU
73-
```
74-
75-
Login page: `http://your-ip:8011`
76-
77-
### Method 2: Jar Package Startup
78-
79-
⚠️ Only JDK8 is supported. Temurin8/Zulu8 JDK is recommended.
80-
81-
Use `java -jar java-chains.jar` to start. A randomly generated password will be printed after each startup.
82-
83-
Default listening address is 0.0.0.0. Login page: `http://your-ip:8011` (Use the username and password here to log in).
84-
85-
You can set the web login password through environment variables, for example:
86-
87-
Linux:
88-
89-
```bash
90-
export CHAINS_PASS=[your_password] && java -jar java-chains.jar
91-
```
92-
93-
Windows:
94-
95-
```cmd
96-
set CHAINS_PASS=[your_password] && java -jar java-chains.jar
97-
```
98-
99-
## Module Introduction
100-
101-
`Java-Chains` comprises the following six major modules:
102-
103-
### Generation Module (Generate)
104-
105-
`JavaNativePayload`: Java Native Deserialization Payload Generation
106-
107-
`HessianPayload`: Hessian1 Deserialization Payload Generation, supporting HessianServlet format deserialized data
108-
109-
`Hessian2Payload`: Hessian2 Deserialization Payload Generation
110-
111-
`ShiroPayload`: Shiro Payload Generation, facilitating manual generation and testing in specific environments
112-
113-
- Supports custom AES KEY
114-
- Supports AES GCM mode
115-
- Supports inserting Base64 obfuscation characters
116-
117-
`OtherPayload`
118-
119-
- `CharsetJarConvet`: Generates charsets.jar package, suitable for file upload RCE scenarios under SpringBoot
120-
- `GroovyJarConvert`: Generates fastjson-groovy.jar package, suitable for achieving RCE in high versions of Fastjson by
121-
loading specific format Jar packages via Groovy chains.
122-
- `SnakeyamlJarConvert`: Generates snakeyaml.jar package, suitable for achieving RCE in SnakeYaml by loading specific
123-
format Jar packages via SPI.
124-
125-
- `JDBCPayload`: JDBC Payload Generation
126-
- H2 JDBC
127-
- PostgresSQL
128-
- ...
129-
130-
`ExpressionPayload`: Expression Payload Generation, essentially replacing the bytecode part in the bytecode template
131-
with the expression. Manual implementation is recommended.
132-
133-
- `BcelConvert`: BCEL format bytecode generation
134-
- `JsConvert`: Oracle Nashorn JS expression loading bytecode
135-
- `VelocityConvert`: Velocity loading bytecode via bcel
136-
- ...
137-
138-
`BytecodePayload`: Bytecode Generation
139-
140-
- For example, can generate bytecode for command execution, Sleep, DNSLog, in-memory webshell injection, echo,
141-
middleware detection, file writing, and file downloading.
142-
- Supports custom bytecode version
143-
- Supports custom bytecode class name
144-
- Supports generating TemplatesImpl bytecode format - implementing the AbstractTranslet interface
145-
- Supports bytecode obfuscation using Class-Obf
146-
147-
`XStreamPayload`: XStream data generation, not fully tested yet, some Payloads may not be usable.
148-
149-
---
150-
151-
The Payloads generated by this platform support the following obfuscation scenarios:
152-
153-
| | JavaNativePayload | HessianPayload | Hessian2Payload |
154-
|--------------------------------------|-------------------|----------------|-----------------|
155-
| Random Collection Dirty Data Padding ||||
156-
| Garbage Class Padding ||||
157-
| UTF-8 Overlong Encoding ||||
158-
| TC_RESET Padding ||||
159-
160-
---
161-
162-
Note: If you want to use `UserCustomByteArrayFromXXX` to provide custom Java serialized byte stream data for
163-
obfuscation, currently it does not support random collection and garbage class insertion obfuscation. This is related to
164-
the implementation of obfuscation. The specific support is as follows:
165-
166-
| | JavaNativePayload (Custom Serialization Scenario) |
167-
|-------------------------------|---------------------------------------------------|
168-
| Random Collection Obfuscation ||
169-
| Garbage Class Insertion ||
170-
| UTF-8 Overlong Encoding ||
171-
| TC_RESET Padding ||
172-
173-
### JNDI Injection Exploitation Module (JNDI)
174-
175-
Supports six exploitation techniques, plus a ShowHand chain for easy one-click testing of common chains.
176-
177-
`JndiBasicPayload`: LDAP remote bytecode loading
178-
179-
`JndiDeserializationPayload`: Deserialization based on the javaSerializedData field in LDAP
180-
181-
`JndiResourceRefPayload`: LDAP exploitation based on BeanFactory Tomcat EL, Groovy, etc.
182-
183-
`JndiReferencePayload`: LDAP Reference exploitation based on other ObjectFactories, such as various DataSource JDBC
184-
exploits.
185-
186-
`JndiRMIDeserializePayload`: RMI deserialization to bypass high version JDK in LDAP
187-
188-
`JndiRefBypassPayload`: ReferenceBypass to bypass high version JDK in LDAP
189-
190-
`JndiShowHandPayload`: JNDI ShowHand Chain, one-click testing of common exploitation chains to improve testing
191-
efficiency.
192-
193-
### MySQL JDBC Deserialization Exploitation Module (Fake MySQL)
194-
195-
`FakeMySQLPayload`: MySQL JDBC deserialization exploitation technique
196-
197-
`FakeMySQLReadPayload`: MySQL JDBC client file read exploitation technique
198-
199-
`FakeMySQLSHPayload`: FakeMySQL deserialization ShowHand Chain, one-click testing of common deserialization chains to
200-
improve testing efficiency.
201-
202-
### JRMP Deserialization Exploitation Module (JRMPListener)
203-
204-
Can be used with JRMPClient deserialization chain to bypass low versions of RMI.
205-
206-
### TCP Server
207-
208-
A simple TCP Server that can mount generated Payload files to a TCP port. Accessing this port will return the specified
209-
content.
210-
211-
Suitable for Derby deserialization RCE scenarios, can directly obtain deserialization data through the TCP port.
212-
213-
### HTTP Server
214-
215-
A simple HTTP server that mounts generated Payload files to an HTTP port. Accessing the specified port will return the
216-
specified content.
217-
218-
Suitable for scenarios such as PostgreSQL remote loading of SpringBeanXML files.
219-
220-
### Tools
221-
222-
Underlyingly calls SerializationDumper, which can parse serialized data and manually modify the serialVersionUID field
223-
of classes.
224-
225-
![SerializationDumper.png](./img/SerializationDumper.png)
226-
227-
## Detailed use
228-
229-
Github Wiki: https://github.com/vulhub/java-chains/wiki
230-
231-
or Documentation: https://www.yuque.com/shenjingwa-leuvd/wpqdhf/war0zkzgzg3c4bzg
232-
233-
## Other
234-
235-
Advantages of this tool:
236-
237-
1. Compared to command-line tools, web interface operations are simpler and easier to use, making it convenient to
238-
generate JNDI injection, MySQL JDBC, and other test Payloads.
239-
2. Decouples and reuses various Payloads, with dynamically rendered parameter input boxes on the frontend, facilitating
240-
expansion and maintenance.
241-
3. Collects and organizes a comprehensive range of Java, Hessian, and other deserialization Payloads, integrating
242-
various tricks and obfuscation techniques.
243-
244-
Disadvantages (also points to be improved):
245-
246-
1. Some less common Payload combinations may not work properly. Due to decoupling, the complexity of combinations
247-
increases, and it is currently impossible to cover and test all Payload combinations. To mitigate this, the platform
248-
provides a [Preset Chain] dropdown option above the Payload output box, offering tested chain combinations for
249-
reference. It is recommended to test less common Payload combinations in advance. If you find Payloads that do not
250-
run properly, you can submit Issues for feedback.
251-
2. Due to the need for various dependencies to generate Payloads, the project's jar package is relatively large (
252-
200+MB).
253-
3. Less common Payloads and Payloads with low practical value are not yet integrated.
254-
255-
Common questions:
256-
257-
Q: Why use Web instead of Java GUI?
258-
259-
A: Both have advantages, but I believe Web has a wider range of application scenarios. The main reason is that it is
260-
very convenient to operate on the server to generate JNDI injection and other Payloads.
28+
https://java-chains.vulhub.org/docs/guide
26129

26230
## Updated content
26331

0 commit comments

Comments
 (0)