[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