[Java安全]Java反序列化C3P0之利用URLClassLoader

Posted Y4tacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java安全]Java反序列化C3P0之利用URLClassLoader相关的知识,希望对你有一定的参考价值。

文章目录

C3P0是什么

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等

实现不调用构造参数创建对象

这个东西在后面利用链生成的过程中实现了,为什么ysoserial使用这个猜测是为了节省不必要的变量吧,payload更短
可以参考下这篇文章Java ReflectionFactory

利用链分析

首先是生成的过程,前面部分分割最后一个:获取来设置url与classname

接下来就是上面提到的如何实现不调用构造参数创建对象,接下来将对象的connectionPoolDataSource设置为payloads.C3P0内部PoolSource的对象
接下来是反序列化过程,首先恢复一个对象判断是否是IndirectlySerialized的实例,并调用Object

这个过程很巧妙,我们看看他的WriteObject方法,必须这里要抛出异常才能进入catch分支

这其中的ReferenceIndirector实现了Indirector

WriteObject当中调用了indirectForm

实现了IndirectlySerialized


因此是可行的,再往下接下来indirectForm里面调用了getReference方法因此为什么PoolSource实现了这个方法

这里简单赋值,具体是干什么的看后面readObject调用的getObject方法

referenceToObject把引用转化为实例

接下来利用URLCLassLoader加载实例化恶意类

以上是关于[Java安全]Java反序列化C3P0之利用URLClassLoader的主要内容,如果未能解决你的问题,请参考以下文章

[Java安全]Java反序列化C3P0之利用URLClassLoader

[Java安全]C3P0反序列化不出网利用学习

[Java安全]C3P0反序列化不出网利用学习

[Java安全]C3P0反序列化不出网利用学习

(转)java redis使用之利用jedis实现redis消息队列

[Java反序列化]C3P0反序列化