
Enumeración remota del classpath de Java mediante deserialización
EnumJavaLibs: enumeración remota del classpath de Java mediante deserialización.
Descripción general
EnumJavaLibs se puede utilizar para descubrir qué bibliotecas están cargadas (es decir, disponibles en el classpath) por una aplicación Java remota cuando admite deserialización.
-----------------
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
Para obtener más información sobre cómo usar la herramienta, consulte esta publicación de blog.
Obtención de archivos jar
Se requiere un repositorio local de archivos jar en ~/.serially/jars. Debe ejecutar el script de python3 JavaClassDB para indexar los archivos jar antes de ejecutar EnumJavaLibs. Una forma de construir un repositorio local es descargar las bibliotecas Java más populares desde Maven Central. Proporciono un script getPopularJars.py que se puede utilizar de la siguiente manera:
./getPopularJars.py 20 | while read x; do wget --quiet -P ~/.serially/jars $x; sleep 5; done
Este comando extraerá los 20 archivos jar más populares de mavenrepository.com.
Otra forma de inicializar su repositorio local de archivos jar si usa Maven es copiar los archivos jar que ya tiene en la caché de Maven (~/.m2/repository).
RMI
Para probar RMI, creé una imagen de Docker que puede descargar desde [https://cloud.docker.com/repository/docker/summ1t/jmxrmi_vulnerable/general], la cual levanta un host que escucha en RMI en el puerto 1617. Ejecuta Java 8u40, que es vulnerable. Tiene la biblioteca nanohttpd-2.2.0.jar cargada en el classpath para demostrar que EnumJavaLibs puede descubrir esta biblioteca de forma remota (siempre que haya preparado su repositorio local con este jar).