基础
JDBC 是个 java 用来统一管理数据库的接口
JDBC 的基本用法:
1 | public static void main(String[] args) throws Exception{ |

漏洞点
?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。