安全攻防丨反序列化漏洞的实操演练
原文中文,约14900字,阅读约需36分钟。
📝
内容提要
本文介绍了序列化和反序列化的基本概念,常用的序列化/反序列化库,以及反序列化漏洞的利用实战,包括JDK、Jackson和SnakeYaml的漏洞。提供了攻击代码和防御措施。
🎯
关键要点
-
序列化是将内存对象转化为可存储和传输的格式,反序列化是将存储的格式还原为对象实例。
-
常用的序列化/反序列化库包括JDK、Jackson、SnakeYaml等。
-
反序列化漏洞发生在未对输入数据进行充分校验时,攻击者可以构造恶意数据链实现任意命令执行。
-
JDK反序列化漏洞利用需要特定的JDK和commons-collections版本,并通过构造对象链实现命令执行。
-
攻击链的第一环为BadAttributeValueExpException的readObject方法,利用反射机制执行命令。
-
如果黑名单方法禁止了某个类的反序列化,攻击者可以换用其他类进行攻击。
-
安全编码防御应通过白名单校验控制反序列化源,确保只允许特定类的反序列化。
-
Jackson反序列化漏洞利用通过远程加载恶意bean定义文件实现任意命令执行。
-
使用Jackson的enableDefaultTyping特性可能导致安全风险,需谨慎使用。
-
SnakeYaml反序列化漏洞利用Java SPI机制,通过远程加载恶意类实现任意代码执行。
-
安全防御措施包括控制反序列化源和使用白名单机制,确保只允许安全的类被反序列化。
🏷️