
Remote-Enumeration des Java-Klassenpfads per Deserialisierung
EnumJavaLibs: Remote-Enumeration des Java-Klassenpfads per Deserialisierung.
Übersicht
EnumJavaLibs kann verwendet werden, um herauszufinden, welche Bibliotheken von einer entfernten Java-Anwendung geladen werden (d. h. im Klassenpfad verfügbar sind), wenn diese Deserialisierung unterstützt.
-----------------
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
Weitere Informationen zur Verwendung des Tools finden Sie in diesem Blogbeitrag.
JAR-Dateien beschaffen
Ein lokales Repository mit JAR-Dateien ist unter ~/.serially/jars erforderlich. Sie sollten das Python3-Skript JavaClassDB ausführen, um die JAR-Dateien zu indizieren, bevor Sie EnumJavaLibs ausführen. Eine Möglichkeit, ein lokales Repository aufzubauen, besteht darin, die beliebtesten Java-Bibliotheken von Maven Central herunterzuladen. Ich stelle ein Skript getPopularJars.py bereit, das wie folgt verwendet werden kann:
./getPopularJars.py 20 | while read x; do wget --quiet -P ~/.serially/jars $x; sleep 5; done
Dieser Befehl extrahiert die 20 beliebtesten JAR-Dateien von mavenrepository.com.
Eine weitere Möglichkeit, Ihr lokales JAR-Repository einzurichten, wenn Sie Maven verwenden, besteht darin, die JAR-Dateien zu kopieren, die Sie bereits im Maven-Cache (~/.m2/repository) haben.
RMI
Um RMI zu testen, habe ich ein Docker-Image erstellt, das Sie von [https://cloud.docker.com/repository/docker/summ1t/jmxrmi_vulnerable/general] herunterladen können. Es startet einen Host, der auf RMI auf Port 1617 lauscht. Es läuft mit Java 8u40, das verwundbar ist. Auf dem Klassenpfad ist die Bibliothek nanohttpd-2.2.0.jar geladen, um zu zeigen, dass EnumJavaLibs in der Lage ist, diese Bibliothek aus der Ferne zu erkennen (vorausgesetzt, Sie haben Ihr lokales Repository mit dieser JAR-Datei vorbereitet).