
EnumJavaLibs: デシリアライゼーションによるリモートJavaクラスパス列挙
概要
EnumJavaLibsは、デシリアライゼーションをサポートするリモートJavaアプリケーションによってロードされている(つまりクラスパス上で利用可能な)ライブラリを発見するために使用できます。
-----------------
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ファイルの取得
jarファイルのローカルリポジトリが ~/.serially/jars に必要です。EnumJavaLibsを実行する前に、JavaClassDBのpython3スクリプトを実行してjarファイルをインデックス化する必要があります。ローカルリポジトリを構築する1つの方法は、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リポジトリを構築するもう1つの方法は、Mavenキャッシュ(~/.m2/repository)に既にあるjarファイルをコピーすることです。
RMI
RMIをテストするために、[https://cloud.docker.com/repository/docker/summ1t/jmxrmi_vulnerable/general] から取得できるDockerイメージを作成しました。このイメージは、RMIをポート1617で待ち受けるホストを起動します。Java 8u40で動作しており、このバージョンには脆弱性があります。クラスパスには nanohttpd-2.2.0.jar ライブラリがロードされており、EnumJavaLibsがこのライブラリをリモートで発見できることを示しています(ローカルリポジトリにこのjarを準備している場合)。