面试题答案
一键面试1. java.util.PriorityQueue
用于反序列化攻击的过程
- 触发反序列化:当存在不安全的反序列化操作时,攻击者构造恶意的字节流数据,该数据在反序列化时会尝试实例化
PriorityQueue
对象。 - 利用比较器:攻击者可以通过精心构造
PriorityQueue
中的元素以及自定义比较器(Comparator
)。在反序列化PriorityQueue
时,会调用heapify
方法,该方法会根据比较器对队列中的元素进行排序。 - 执行恶意代码:如果在比较器的
compare
方法中编写了恶意代码,例如执行系统命令、加载恶意类等,那么在heapify
方法执行排序操作时,就会触发恶意代码的执行。
2. 攻击者利用的特性
- 反序列化机制漏洞:Java的反序列化机制本身存在安全性问题,只要能够控制反序列化的数据内容,就有可能构造恶意对象。
PriorityQueue
作为可被反序列化的类,成为攻击目标。 - 比较器自定义:
PriorityQueue
支持自定义比较器,攻击者可以利用这一点,在比较器中嵌入恶意逻辑。比较器在反序列化后的排序过程中被调用,从而使得恶意代码得以执行。 - 自动排序行为:
PriorityQueue
在反序列化后会自动调用heapify
方法进行排序,这个自动执行的特性为攻击者提供了无需额外方法调用即可触发恶意代码的机会。