Add files via upload

This commit is contained in:
雾島风起時
2025-09-25 03:55:13 +08:00
committed by GitHub
parent 6eda7b2da8
commit 2efe415c28
12 changed files with 430 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
### 讲一下 CC1-7 的原理
**CC1: `InvokerTransformer`**
- **原理**:这是最经典、最著名的利用链。它利用了 `InvokerTransformer` 这个类,它的 `transform` 方法可以通过反射调用任何对象的任何方法
- **攻击链**
1. **`LazyMap`**:它是一个惰性加载的 Map,当访问一个不存在的键时,会调用一个 `Transformer` 来生成值
2. **`InvokerTransformer`**:攻击者将 `InvokerTransformer` 封装到 `LazyMap` 中,并指定其调用 `Runtime.getRuntime().exec()` 方法
3. **`AnnotationInvocationHandler`**:当 `LazyMap` 被反序列化时,`AnnotationInvocationHandler` 会调用它的 `invoke` 方法,从而触发 `LazyMap``get` 方法
4. **`Runtime.exec()`**:最终,`LazyMap``get` 方法会调用 `InvokerTransformer`,通过反射执行 `Runtime.exec()`,从而执行任意命令
- **绕过**:由于 `InvokerTransformer` 过于危险,它很快被许多安全框架和应用服务器加入了反序列化黑名单
**CC2-CC7:黑名单绕过与新 Gadget Chain 的发现**
在 CC1 被加入黑名单后,研究人员开始寻找新的、没有被列入黑名单的 Gadget Chain。这些新的利用链都遵循同样的原理,只是**利用了不同的类来构建多米诺骨牌**
- **CC2 (`j_object`)**:利用 `Spring` 框架中的 `Javassist` 类库。它通过 `ClassPathXmlApplicationContext` 加载一个远程 XML 文件,从而执行远程代码
- **CC3 (`j_object`)**:利用 `AbstractMap``hashCode` 方法,通过 `equals` 方法来触发 `InvokerTransformer`
- **CC4 (`j_object`)**:利用 `Spring``BadAttributeValueExpException` 类。当这个类被反序列化时,它的 `toString` 方法会被调用,从而触发 `InvokerTransformer`
- **CC5 (`j_object`)**:这个利用链与 CC1 类似,但它通过 `TiedMapEntry` 来触发 `LazyMap`,从而绕过了一些针对 `AnnotationInvocationHandler` 的防御
- **CC6 (`j_object`)**:这个利用链也使用了 `TiedMapEntry`,但它通过 `TiedMapEntry``toString` 方法来触发 `LazyMap`
- **CC7 (`j_object`)**:这个利用链使用 `HashedMap``readObject` 方法来触发 `AbstractMap``put` 方法,最终触发 `InvokerTransformer`