安全攻防丨反序列化漏洞的实操演练

💡 原文中文,约14900字,阅读约需36分钟。
📝

内容提要

本文介绍了序列化和反序列化的基本概念,常用的序列化/反序列化库,以及反序列化漏洞的利用实战,包括JDK、Jackson和SnakeYaml的漏洞。提供了攻击代码和防御措施。

🎯

关键要点

  • 序列化是将内存对象转化为可存储和传输的格式,反序列化是将存储的格式还原为对象实例。

  • 常用的序列化/反序列化库包括JDK、Jackson、SnakeYaml等。

  • 反序列化漏洞发生在未对输入数据进行充分校验时,攻击者可以构造恶意数据链实现任意命令执行。

  • JDK反序列化漏洞利用需要特定的JDK和commons-collections版本,并通过构造对象链实现命令执行。

  • 攻击链的第一环为BadAttributeValueExpException的readObject方法,利用反射机制执行命令。

  • 如果黑名单方法禁止了某个类的反序列化,攻击者可以换用其他类进行攻击。

  • 安全编码防御应通过白名单校验控制反序列化源,确保只允许特定类的反序列化。

  • Jackson反序列化漏洞利用通过远程加载恶意bean定义文件实现任意命令执行。

  • 使用Jackson的enableDefaultTyping特性可能导致安全风险,需谨慎使用。

  • SnakeYaml反序列化漏洞利用Java SPI机制,通过远程加载恶意类实现任意代码执行。

  • 安全防御措施包括控制反序列化源和使用白名单机制,确保只允许安全的类被反序列化。

🏷️

标签

➡️

继续阅读