标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2259] 作者: 凉笙 发表于: [2019-01-04]
本文共 [853] 位读者顶过
1 、数据库连接池介绍
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。常见的数据库连接池有C3P0、DBCP(Apache的JAVA数据库连接池项目,Tomcat默认数据源就是DBCP)、Druid(阿里出品,淘宝和支付宝专用数据库连接池)等。 2 、C3P0执行流程及漏洞原理C3P0的官网为:https://www.mchange.com/projects/c3p0 你可以在https://www.mchange.com/projects/c3p0/apidocs/index.html 查看C3P0的API文档。 先贴上Demo主要代码
[出自:jiwo.org] UserDaoImpl 类:
我们在ComboPooledDataSource dataSource = new ComboPooledDataSource()这一行代码打上断点,然后进行调试。 由入口ComboPooledDataSource类开始 调用父类AbstractPoolBackedDataSource的AbstractPoolBackedDataSource()方法 再调用父类PoolBackedDataSourceBase的PoolBackedDataSourceBase()方法 但是在执行该方法前,会先初始化dataSourceName变量
跟进C3P0Config.initializeStringPropertyVar()方法,发现C3P0Config类有个静态代码块
调用了C3P0ConfigFinder接口的findConfig()方法,C3P0ConfigFinder接口只有一个实现类DefaultC3P0ConfigFinder
C3P0ConfigXmlUtils.extractXmlConfigFromDefaultResource() 再调用C3P0ConfigXmlUtils.extractXmlConfigFromInputStream(InputStream)方法,即读取常量XML_CONFIG_RSRC_PATH = "/c3p0-config.xml" 进行初始化,导致了XXE漏洞 运行效果图如下:
3 、该漏洞修复方案 在使用XML解析器时需要设置禁止使用外部实体。以DocumentBuilderFactory为例
|