天天看点

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

文章目录

  • ​​Java-CommonsCollections2TemplatesImpl利用链分析​​
  • ​​完整代码​​

Java-CommonsCollections2TemplatesImpl利用链分析

我们知道我们之前可以利用​

​TemplatesImpl​

​​ 构造出⽆​

​Transformer数组​

​​的利⽤链,那这里是否可以实现呢,答案是是的,在这里的​

​queue​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

现在开始正文,还是稍微详细说一下利用过程吧

现在我们的目标就是通过​

​PriorityQueue​

​来调用​

​TemplatesImpl​

​的​

​newTransformer​

​来加载字节码

Transformer transformer = new InvokerTransformer("newTransformer", null, null);      

通过​

​readObject​

​​调用​

​heapify​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

再调用​

​siftDown​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

再调用​

​siftDownUsingComparator​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

通过调用​

​compare​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

触发​

​TransformingComparator​

​的​

​compare​

​方法

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

通过​

​InvokerTransformer​

​利用反射来调用​

​TemplatesImpl​

​的​

​newTransformer​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

触发​

​TemplatesImpl​

​​的​

​newTransformer​

​,

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

调用​

​getTransletInstance​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析

调用​

​Classloader​

​的​

​defineClass​

​实现字节码调用

完整代码