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。
CVE-2021-2471
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) |
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) |
CodeQL with Mysql XXE
5.*的需要安装jdk5,比较麻烦,这里以8.0.26为例
Build Mysql QL DB
1 |
|
Run QL Search
1 | /** |
总结
Postgresql很早就有XXE CVE,横向思维是个好东西,可惜还是不够不能主动发现😭
CodeQL是个好东西,在构建调用图的基础上,有一套解释型语言来进行搜索,比neo4j要方便很多。值得深入学习,本篇算是记录CodeQL学习的入门篇,期待。。。