
Enumeração remota do classpath Java via desserialização
EnumJavaLibs: Enumeração remota de classpath Java via desserialização.
Visão geral
O EnumJavaLibs pode ser usado para descobrir quais bibliotecas estão carregadas (ou seja, disponíveis no classpath) por uma aplicação Java remota quando ela suporta desserialização.
-----------------
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 mais informações sobre como usar a ferramenta, consulte esta publicação no blog.
Obtendo arquivos jar
É necessário um repositório local de arquivos jar em ~/.serially/jars. Você deve executar o script python3 JavaClassDB para indexar os arquivos jar, antes de executar o EnumJavaLibs. Uma forma de construir um repositório local é baixar as bibliotecas Java mais populares do maven central. Eu forneço um script getPopularJars.py que pode ser usado da seguinte forma:
./getPopularJars.py 20 | while read x; do wget --quiet -P ~/.serially/jars $x; sleep 5; done
Este comando irá coletar os 20 arquivos jar mais populares do mavenrepository.com.
Outra forma de inicializar seu repositório local de jars, se você estiver usando maven, é copiar os arquivos jar que você já tem no cache do maven (~/.m2/repository)
RMI
Para testar RMI, eu criei uma imagem docker que você pode obter em [https://cloud.docker.com/repository/docker/summ1t/jmxrmi_vulnerable/general], que sobe um host que escuta RMI na porta 1617. Está executando Java 8u40, que é vulnerável. Ele tem a biblioteca nanohttpd-2.2.0.jar carregada no classpath para demonstrar que o EnumJavaLibs é capaz de descobrir essa biblioteca remotamente (desde que você prepare seu repositório local com esse jar)