EnumJavaLibs:通过反序列化进行远程 Java classpath 枚举。
概述
EnumJavaLibs 可用于发现远程 Java 应用在支持反序列化时加载了哪些库(即可用于 classpath 的库)。
-----------------
Serially - v1.1
by Stefan Broeder
-----------------
Usage:
EnumJavaLibs {MODE} [OPTIONS]
MODES:
base64 Write base64 encoded serialized objects to CSV file in current directory
rmi {host} {port} RMI mode. Connect to RMI endpoint and try deserialization.
OPTIONS:
-f {string} Only serialize classes from packages which contain the given string (e.g. org.apache.commons)
-d Debug mode on
有关如何使用该工具的更多信息,请参阅这篇博客文章。
获取 jar 文件
在 ~/.serially/jars 中需要有一个本地 jar 文件仓库。在运行 EnumJavaLibs 之前,你应该运行 JavaClassDB python3 脚本来索引 jar 文件。构建本地仓库的一种方法是从 Maven Central 下载最流行的 Java 库。我提供了一个 getPopularJars.py 脚本,用法如下:
./getPopularJars.py 20 | while read x; do wget --quiet -P ~/.serially/jars $x; sleep 5; done
该命令将从 mavenrepository.com 抓取 20 个最流行的 jar 文件。
如果你使用 Maven,另一种引导本地 jar 仓库的方法是复制 Maven 缓存(~/.m2/repository)中已有的 jar 文件
RMI
为了测试 RMI,我创建了一个 docker 镜像,你可以从 [https://cloud.docker.com/repository/docker/summ1t/jmxrmi_vulnerable/general] 获取,它会启动一个在 1617 端口监听 RMI 的主机。它运行的是存在漏洞的 Java 8u40。其 classpath 上加载了 nanohttpd-2.2.0.jar,用于展示 EnumJavaLibs 能够远程发现该库(前提是你已经在本地仓库中准备了该 jar)