JDBC反序列化
随便学学
原理
如果攻击者能够控制JDBC连接设置项,那么就可以通过设置其指向恶意MySQL服务器进行ObjectInputStream.readObject()的反序列化攻击从而RCE。
具体点说,就是通过JDBC连接MySQL服务端时,会有几个内置的SQL查询语句要执行,其中两个查询的结果集在MySQL客户端被处理时会调用ObjectInputStream.readObject()进行反序列化操作。如果攻击者搭建恶意MySQL服务器来控制这两个查询的结果集,并且攻击者可以控制JDBC连接设置项,那么就能触发MySQL JDBC客户端反序列化漏洞。
漏洞复现
现在自己的服务器上安装一个恶意的mysql服务器
然后去用maven搭一个mysql jdbc去请求咱们的恶意服务器
Analysis
Presentations - eu-19-Zhang-New-Exploit-Technique-In-Java-Deserialization-Attack (blackhat.com)
1 | import java.sql.*; |
Learn
Magic methods will be invoked automatically during the deserialization process.
- readObject()
- readExternal()
- readResolve()
- readObjectNoData()
- validateObject()
- finalize()