面试题答案
一键面试常见可利用类及原理
java.beans.XMLDecoder
- 原理:
XMLDecoder
用于从XML流中重建对象。当处理恶意构造的XML时,它可能会执行外部类的构造函数、方法,从而达到执行恶意代码的目的。例如,通过定义一个恶意的类,并在XML中通过<object>
标签引用该类,XMLDecoder
在解析时会实例化该恶意类并执行其构造函数等相关代码。
- 原理:
org.apache.commons.collections.Transformer
相关类(如ChainedTransformer
、ConstantTransformer
等)- 原理:在
Apache Commons Collections
库中,Transformer
接口及其实现类被广泛用于对对象进行转换操作。攻击者可以利用这些类,通过构造特定的Transformer
链,例如使用ConstantTransformer
返回恶意类的构造函数,再通过InvokerTransformer
调用构造函数创建恶意对象,进而执行恶意代码。通常结合AnnotationInvocationHandler
等类,在反序列化过程中触发恶意代码执行。
- 原理:在
sun.reflect.annotation.AnnotationInvocationHandler
- 原理:
AnnotationInvocationHandler
用于处理注解的动态代理。在反序列化时,如果构造恶意的Map
对象作为参数,利用反射机制,攻击者可以在readObject
方法中执行任意代码。通过设置特定的键值对,使得AnnotationInvocationHandler
在处理注解时调用恶意方法,从而执行恶意代码。
- 原理:
javax.el.ELProcessor
- 原理:
ELProcessor
用于处理表达式语言(EL)。当反序列化过程中涉及到处理恶意构造的EL表达式时,ELProcessor
会对表达式进行解析和求值。攻击者可以构造包含恶意代码的EL表达式,例如通过#{}
语法,在反序列化时触发执行,从而达到执行恶意代码的目的。
- 原理: