MST

星途 面试题库

面试题:Java反序列化中常见的可利用类有哪些

在Java反序列化安全风险场景下,列举一些常见的可被利用来执行恶意代码的类,并简述其原理。
18.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

常见可利用类及原理

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