Java Deserialization Scanner 是一个 Burp Suite 插件,旨在检测和利用 Java 反序列化漏洞。它由 Federico Dotta 编写,他是 HN Security 的首席安全分析师。
该插件由三个不同的组件组成:
一篇包含如何使用插件各组件简要演练的简短文章,可在以下 URL 找到: https://web.archive.org/web/20201130104913/https://techblog.mediaservice.net/2017/05/reliable-discovery-and-exploitation-of-java-deserialization-vulnerabilities/
Java Deserialization Scanner 使用由 "ysoserial"(frohoff 和 gebl 创建的工具)的修改版本生成的自定义 payload,来检测 Java 反序列化漏洞。原始工具(https://github.com/frohoff/ysoserial)使用 Runtime.exec 函数生成用于在系统上执行命令的 payload。然而,通常无法看到命令的输出,因此基于这类函数编写扫描器并不简单。出于这个原因,我们使用了一个修改版本的 ysoserial 来生成不同类型的 payload,这些 payload 适用于漏洞检测而非漏洞利用:
目前,Java Deserialization Scanner 的被动检查会报告 HTTP 请求中是否存在序列化 Java 对象,而主动检查则会主动扫描是否存在不安全的反序列化函数,以及是否存在以下不安全库:
此外,已引入 URLSNDS payload,用于在没有任何不安全库的情况下主动检测 Java 反序列化。如果插件只发现 URLDNS 问题(且没有不安全的库),攻击者可能可以执行 DoS 攻击,但要实现远程代码执行则需要更多的努力。更多详情请参阅此链接。
插件的所有组件支持以下编码:
在 test 文件夹中有一些简单的 Java 服务器应用,可用于测试插件。每个应用都使用了不同的存在漏洞的 Java 库。
插件提供了一个专用标签页,可在自定义插入点上使用 sleep 和 DNS payload 启动检测,以便在那些奇怪入口点无法通过扫描器进行检测的特殊情况下,检查 Java 反序列化漏洞。手动测试器的结果可以插入到 Burp Suite 扫描器结果中。
手动测试器提供了一种额外的检测方法:CPU 检测。CPU 检测方法基于 Wouter Coekaerts 的 SerialDOS 工作(https://gist.github.com/coekie/a27cc406fc9f3dc7a70d),即使没有任何不安全的库,也能通过使用一个在反序列化过程中消耗大量 CPU 周期的对象,并检查响应时间来检测反序列化问题。CPU 检测方法默认不包含在主动扫描检查中,因为它必须谨慎使用:发送大量“轻量级”的 SerialDOS payload 仍可能对老旧或高负载系统造成问题。
在发现 Java 反序列化漏洞之后,可以使用“利用”专用标签页来主动利用该问题。“利用”标签页提供了一个舒适的界面来利用反序列化漏洞。该标签页使用 ysoserial 工具生成利用向量,并将生成的 payload 包含在 HTTP 请求中。ysoserial 接受一个不安全库和一个命令作为参数,并生成一个二进制形式的序列化对象,该对象可以被发送到存在漏洞的应用程序,以在目标系统上执行命令(显然,前提是目标应用程序存在漏洞)。“利用”标签页支持与插件检测部分相同的编码格式。

为了改进此扩展,请报告插件中发现的任何问题。此外,如果您想向我报告任何已公开的、可用于利用此弱点的 Java 库,如果我有时间,我会在插件中添加相应的主动检查。
本软件纯粹为学术研究和开发有效的防御技术而创建,除非明确授权,否则不应用于攻击系统。项目维护者不对软件的滥用负责或承担责任。请负责任地使用。
版权所有(c)2020 Java Deserialization Scanner
特此免费授予获得本软件及关联文档文件(“软件”)副本的任何人无限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向其提供本软件的人员这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质部分中。
本软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他交易而产生、引起的任何索赔、损害或其他责任负责,无论是合同诉讼、侵权或其他行为。