Files
2025-09-25 03:55:13 +08:00

22 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 讲一下 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`