天天看點

[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​

​實作位元組碼調用

完整代碼