Gentle_knife's Studio.

JDBC漏洞概括

Word count: 315Reading time: 1 min
2026/04/01
loading

安全培训 -先知社区

基础

JDBC 是个 java 用来统一管理数据库的接口

JDBC 的基本用法:

1
2
3
4
5
6
7
 public static void main(String[] args) throws Exception{         
String DB_URL = "jdbc:mysql://127.0.0.1:3306/sectest?var=value";
Driver driver = new com.mysql.jdbc.Driver();
//Make a database connection
Connection conn = driver.connect(DB_URL, props);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,….);
}

漏洞点

?var=value 这里,有各种各样的参数,这里记两个最关键的:

1.detectCustomCollatons链:

数据库为8.x版本时,指定queryInterceotirs参数为com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor,它就会走这个拦截器,然后进行相应的反序列化。

2.ServerStatusDiffInterceptor链:

数据库为5.x版本时,指定detectCustomCollations为true,也会触发一定的逻辑,进行相应的反序列化。

结论

【反序列化链子跟着走一遍省略】

结论就是若攻击者能控制JDBC连接设置项,则可以通过设置其配置指向恶意mysql服务器触发**ObjectInputStream.readObject()**,构造反序列化利用链从而造成RCE。

JDBC 反序列化实现的是**readObject()**入口的进入。

JDBC ->readObject() -> 本地Gadget ->RCE

也就是说 JDBC 只能开启反序列化的入口,能 RCE 还是要本身就有能通过反序列化执行的链子,也就是 Gadget。

CATALOG
  1. 1. 基础
  2. 2. 漏洞点
  3. 3. 结论