
Enumerazione remota del classpath Java tramite deserializzazione
EnumJavaLibs: enumerazione remota del classpath Java tramite deserializzazione.
Panoramica
EnumJavaLibs può essere usato per scoprire quali librerie sono caricate (cioè disponibili nel classpath) da un'applicazione Java remota quando supporta la deserializzazione.
-----------------
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
For more information about how to use the tool, please see this blog post.
Ottenere i file jar
È necessario un repository locale di file jar in ~/.serially/jars. Prima di eseguire EnumJavaLibs, dovresti eseguire lo script python3 JavaClassDB per indicizzare i file jar. Un modo per creare un repository locale è scaricare le librerie Java più popolari da Maven Central. Fornisco uno script getPopularJars.py che può essere usato come segue:
./getPopularJars.py 20 | while read x; do wget --quiet -P ~/.serially/jars $x; sleep 5; done
Questo comando recupera i 20 file jar più popolari da mavenrepository.com.
Un altro modo per creare il repository locale di jar, se usi Maven, è copiare i file jar che hai già nella cache di Maven (~/.m2/repository)
RMI
Per testare RMI, ho creato un'immagine Docker che puoi scaricare da [https://cloud.docker.com/repository/docker/summ1t/jmxrmi_vulnerable/general], che avvia un host in ascolto su RMI sulla porta 1617. Esegue Java 8u40, che è vulnerabile. Ha la libreria nanohttpd-2.2.0.jar caricata nel classpath per dimostrare che EnumJavaLibs è in grado di scoprire questa libreria in remoto (a condizione che tu abbia preparato il tuo repository locale con questo jar)