Fastjson_Mysql_gadget复现
内容提要
本文介绍了Fastjson的MySQL gadget漏洞复现方法,包括多种payload示例(如JDBC4Connection和LoadBalancedMySQLConnection),并详细列出了受影响版本范围(如5.1.11-5.1.48、6.0.2/6.0.3等),以及不同触发方式(如ServerStatusDiffInterceptor和detectCustomCollations)的适用条件。
延伸解读
触发条件与版本差异
文章明确指出,Fastjson 的 MySQL gadget 利用受 MySQL Connector/J 版本影响显著。例如,ServerStatusDiffInterceptor 触发方式在 5.1.11 及以上版本可用,但 5.1.10 及以下需要连接后执行查询;而 5.0.x 则完全不具备该拦截器。detectCustomCollations 触发方式则仅在 5.1.19 至 5.1.40 版本区间内有效。因此,复现前需确认目标环境的具体版本,否则可能无法成功触发。
payload 构造要点
payload 中 user 字段的格式为“yso_<gadget>_<command>”,例如“yso_CommonsBeanutils1_calc”,其中“yso_”为固定前缀,gadget 名称和命令可替换。此外,不同版本的 MySQL Connector/J 使用的类名和属性名不同,如 5.x 版本使用“com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor”,而 6.x 版本则使用“com.mysql.cj.jdbc.interceptors.Ser
复现环境建议
文章提供了多个依赖版本示例,如 5.1.12 和 6.0.2,并给出了实测影响版本范围(5.1.11-5.1.48、6.0.2/6.0.3、8.0.19)。建议在隔离的测试环境中搭建 MySQL 假服务器(参考 fnmsd/MySQL_Fake_Server),并准备 ysoserial 生成 gadget 链。同时,注意 Fastjson 版本需支持 AutoCloseable 绕过,且目标 JDBC 连接需允许反序列化(autoDeserialize=true)。
Q&A
Fastjson MySQL gadget漏洞是什么?
Fastjson MySQL gadget漏洞是指Fastjson在反序列化时,通过构造特定的JSON数据,利用MySQL JDBC驱动中的某些类(如JDBC4Connection、LoadBalancedMySQLConnection)触发反序列化,从而执行任意命令的漏洞。
Fastjson MySQL gadget漏洞的复现步骤是什么?
复现步骤包括:1. 准备一个恶意的MySQL服务器(如使用MySQL_Fake_Server);2. 构造包含特定@type的JSON payload,例如使用com.mysql.jdbc.JDBC4Connection或com.mysql.cj.jdbc.ha.LoadBalancedMySQLConnection;3. 在Fastjson中解析该JSON,触发连接和反序列化,执行命令。
Fastjson MySQL gadget漏洞影响哪些MySQL Connector/J版本?
根据文章,影响版本包括:5.1.11-5.1.48(反序列化链)、6.0.2/6.0.3(反序列化)、8.0.19(反序列化链)。具体触发方式不同,版本范围也有差异。
ServerStatusDiffInterceptor触发方式适用于哪些MySQL版本?
ServerStatusDiffInterceptor触发方式适用于:5.1.11及以上的5.x版本(使用com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor);6.x版本(使用com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor,属性名为statementInterceptors);8.0.20以下版本(使用queryInterceptors)。5.1.10及以下需要连接后执行查询,5.0.x不支持。
detectCustomCollations触发方式适用于哪些MySQL版本?
detectCustomCollations触发方式适用于:5.1.29-5.1.40(需设置detectCustomCollations=true&autoDeserialize=true);5.1.19-5.1.28(只需autoDeserialize=true);5.1.41及以上不可用,5.1.18以下及5.0.x不可用。
Fastjson MySQL gadget payload中user字段的作用是什么?
payload中user字段用于指定反序列化链和要执行的命令,格式为yso_<gadget>_<command>,例如yso_CommonsBeanutils1_calc表示使用CommonsBeanutils1 gadget执行calc命令。
Fastjson MySQL gadget漏洞的修复建议是什么?
文章未提供修复建议,但通常建议升级Fastjson到安全版本,或升级MySQL Connector/J到不受影响的版本,并避免使用不安全的反序列化配置。