pyn3rd师傅的《Make JDBC Attack Brilliant Again》中有一个0day是mysql jdbc xxe,thread3am师傅也早就复现出来了,而且还发现了h2的xxe。膜一个,师傅们都太🐂🍺了。很多师傅们也复现了,再讲也没啥意思了,用CodeQL整点新的吧。
- CVE-2021-2471 mysql jdbc xxe在HITB ppt里面,没有讲DOMSource XXE这一部分,原因应该是pyn3rd师傅提漏洞还未公开,没写在ppt里面。所以这个洞有两个东西: - a. DOMSource XXE, 影响所有版本,官方8.0.27中修复掉了 - b. Fabric XXE, 影响5.x, 在5.1.49中修复 
- CodeQL CWE-611有XXE的检测poc,不过source源不支持mysql。 
0x01 CVE-2021-2471
1.1 DOMSource XXE
漏洞代码在 com.mysql.cj.jdbc.MysqlSQLXML#getSource
| 1 | public <T extends Source> T getSource(Class<T> clazz) throws SQLException { | 
很明显的XXE了(StAXSource不能利用)
POC用thread3am是否的,见参考【5】
调用栈如下,也比较简单
| 1 | parse:327, DocumentBuilderImpl (com.sun.org.apache.xerces.internal.jaxp) | 
1.2 Fabric XXE
漏洞触发代码在 com.mysql.fabric.xmlrpc.Client#execute
| 1 | public MethodResponse execute(MethodCall methodCall) throws IOException, ParserConfigurationException, SAXException, MySQLFabricException { | 
原理逻辑pyn3rd 师傅PPT给出来了,fake mysql fabric server 代码也给出来了
| 1 | # -*- coding=utf-8 -*- | 
调用栈
| 1 | execute:91, Client (com.mysql.fabric.xmlrpc) | 
0x02 CodeQL with Mysql XXE
5.*的需要安装jdk5,比较麻烦,这里以8.0.26为例
2.1 Build Mysql QL DB
| 1 | 
 | 
2.2 Run QL Search
| 1 | /** | 

2.2.1 Update@2023
Sourc点改为更通用的接口
| 1 | private class MySQLJdbcSource extends RemoteFlowSource { | 
0x03 总结
Postgresql很早就有XXE CVE,横向思维是个好东西,可惜还是不够不能主动发现😭
CodeQL是个好东西,在构建调用图的基础上,有一套解释型语言来进行搜索,比neo4j要方便很多。值得深入学习,本篇算是记录CodeQL学习的入门篇,期待。。。