File tree Expand file tree Collapse file tree 2 files changed +74
-1
lines changed
Expand file tree Collapse file tree 2 files changed +74
-1
lines changed Original file line number Diff line number Diff line change 1818
1919## 分类
2020
21- 当前问题总数:67
21+ 当前问题总数:75
2222
2323[ Java本身的安全问题 - 16个] ( https://github.com/4ra1n/JavaSecInterview/tree/master/java )
2424
3232
3333[ 内存马专题 - 8个] ( https://github.com/4ra1n/JavaSecInterview/tree/master/memshell )
3434
35+ [ 反序列化CC链专题 - 8个] ( https://github.com/4ra1n/JavaSecInterview/tree/master/cc )
36+
3537## 参考
3638
3739https://github.com/LandGrey/SpringBootVulExploit
Original file line number Diff line number Diff line change 1+ ## CC
2+
3+ - 谈下CC链中三个重要的` Transformer ` (★★★)
4+
5+ ` ConstantTransformer ` 类的` transform ` 方法直接返回传入的类对象
6+
7+ ` ChainedTransformer ` 类中的` transform ` 方法会链式调用其中的其他` Transformer.transform ` 方法
8+
9+ ` InvokerTransformer ` 类根据传入参数可以反射调用对应的方法
10+
11+ ` InstantiateTransformer ` 类可以直接实例化对象
12+
13+
14+
15+ - 谈谈CC1(★★★)
16+
17+ 原理是` LazyMap.get ` 可以触发构造的` Transformer ` 链的` transform ` 方法导致` RCE `
18+
19+ 基于动态代理触发的` LazyMap.get ` ,在` AnnotationInvocationHanlder ` 中的` invoke ` 方法中存在` Map.get ` 操作
20+
21+
22+
23+ - 谈谈CC2(★★★)
24+
25+ 该链用到` TemplatesImpl ` 类,生成恶意的字节码实例化
26+
27+ 不过触发点是` PriorityQueue ` 类,反射设置属性` TransformingComparator `
28+
29+ ` PriorityQueue ` 类是优先队列,其中包含了排序功能,该功能可以设置比较器` comparator ` ,而` TransformingComparator ` 的` compare ` 方法会调用对象的` transform ` 方法
30+
31+ 于是通过` InvokerTransformer ` 类的` transform ` 方法调用` TemplatesImpl.newTransformer ` 方法导致` RCE `
32+
33+
34+
35+ - 谈谈CC3(★★★)
36+
37+ 该链用到` TemplatesImpl ` 类,生成恶意的字节码实例化
38+
39+ 仍然是基于动态代理和` LazyMap.get ` 触发` InstantiateTransformer ` 的` transform ` 方法导致` RCE `
40+
41+
42+
43+ - 谈谈CC4(★★★)
44+
45+ 和CC2链一致,不过触发时候不是` InvokerTransformer ` 而是` InstantiateTransformer ` 类直接实例化` TrAXFilter ` 子类执行` <init>/<clinit> ` 导致` RCE `
46+
47+
48+
49+ - 谈谈CC5(★★★)
50+
51+ 还是基于` LazyMap.get ` 触发的,不过没有动态代理,是通过` BadAttributeValueExpException.readObject() ` 调用` TiedMapEntry.toString() `
52+
53+ 在` TiedMapEntry.getValue() ` 中存在` Map.get ` 导致` LazyMap.get ` 触发` transform `
54+
55+
56+
57+ - 谈谈CC6(★★★)
58+
59+ 还是基于` LazyMap.get ` 触发的,通过` HashMap.readObject() ` 到达` HashMap.hash() ` 方法,由于key是` TiedMapEntry ` 所以调用` TiedMapEntry.hashCode() `
60+
61+ 而` hashCode ` 方法会调用到` TiedMapEntry.getValue() ` 方法,由于` Map.get ` 导致` LazyMap.get ` 触发` transform `
62+
63+
64+
65+ - 谈谈CC7(★★★)
66+
67+ 还是基于` LazyMap.get ` 触发的,通过` Hashtable.readObject() ` 触发了key的` equals ` 方法,跟入` AbstractMap.equals ` 方法
68+
69+ 其中包含了` Map.get ` 导致` LazyMap.get ` 触发` transform `
70+
71+ 但该链有一个坑:哈希碰撞
You can’t perform that action at this time.
0 commit comments