java安全-CC4
java安全-CC4
环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18oracle_jdk8u65
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
open_jdk8u65
https://hg.openjdk.org/jdk8u/jdk8u/jdk/rev/af660750b2f4
https://github.com/openjdk/jdk8u/releases/tag/jdk8u71-b15
jdk-af660750b2f4\src\share\classes\sun
maven_3.6.3
https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/
教程:https://blog.csdn.net/MSDCP/article/details/127680844
commons-collections4.0
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
</dependency>CC4 绕过的是Commons collections3 的防护,同时也只适用于 Commons collections4 版本
一、主要链路逻辑
CC4 主要是对入口点以及 transformer 调用上做出了改变,也就是反序列化的对象
1.transformer 出口
TransformingComparator 的compare方法调用了transformer方法

1 | TransformingComparator comparator = new TransformingComparator(chainedTransformer); |
2.readObject入口
PriorityQueue#readObject
这个类中调用了
heapify方法PriorityQueue#heapify
PriorityQueue#siftDown
又调用了
siftDownUsingComparator方法PriorityQueue#siftDownUsingComparator
就在这里,调用了我们最想看到的 compare 方法
1 | PriorityQueue<Object> queue = new PriorityQueue<>(comparator); |
二、poc
1.需要解决的条件
PriorityQueue#heapify

这个方法中又进一步调用了siftDown方法
但是这里有一个条件需要满足
1 | for (int i = (size >>> 1) - 1; i >= 0; i--) |
想要运行我们接下来的siftDown函数,必须要使得size大于2才可以进行一次循环
(size >>> 1) - 1 是什么意思?
size: 队列中元素的总个数。>>> 1: 无符号右移 1 位,在数学上等同于 除以 2。- 1: 因为数组下标是从 0 开始的。
所以size需要大于等于2
通过自带的add方法增加size大小
1 | queue.add(1); |
但是,第二次 add(1):
- 队列里已经有一个元素了。
- 新元素放入数组末尾,然后调用
siftUp(上浮) 来维持堆的性质。 siftUp会调用comparator.compare()来比较新元素和父节点!
后果: 如果在 new PriorityQueue 时传入的是已经配置好 Runtime.exec 的恶意 comparator,那么在你写 Payload 代码运行到第二行 add 的时候,就会弹出计算器,而不是生成 Payload 文件
因此,我们通过反射修改,防止走火
1 | Transformer[] chuan0000 = new Transformer[]{new ConstantTransformer(1)}; |
2.完整
1 | byte[] code = Files.readAllBytes(Paths.get("D:\\小川\\code\\javasec\\CC1\\target\\classes\\CC1\\HelloTranslet.class")); |
3.版本问题
commos collections3 不能使用的主要原因是只有4的TransformingComparator实现了序列化接口

commos collections 身世问题
4.总结
1 | readObject |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 十七.!