0
点赞
收藏
分享

微信扫一扫

[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利用链分析_java_02

再调用​​siftDown​

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


再调用​​siftDownUsingComparator​

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


通过调用​​compare​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析_加载_05


触发​​TransformingComparator​​的​​compare​​方法

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析_加载_06


通过​​InvokerTransformer​​利用反射来调用​​TemplatesImpl​​的​​newTransformer​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析_加载_07

触发​​TemplatesImpl​​​的​​newTransformer​​,

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


调用​​getTransletInstance​

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析_字节码_09


调用​​Classloader​​的​​defineClass​​实现字节码调用

[Java反序列化]Java-CommonsCollections2TemplatesImpl利用链分析_字节码_10

完整代码

见​​phith0n/JavaThings​​


举报

相关推荐

0 条评论