
역직렬화를 통한 원격 Java classpath 열거
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 파일 확보
~/.serially/jars에 jar 파일의 로컬 저장소가 필요합니다. EnumJavaLibs를 실행하기 전에 JavaClassDB python3 스크립트를 실행하여 jar 파일을 인덱싱해야 합니다. 로컬 저장소를 구축하는 한 가지 방법은 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을 사용하는 경우, maven 캐시(~/.m2/repository)에 이미 있는 jar 파일을 복사하여 로컬 jar 저장소를 부트스트랩하는 또 다른 방법이 있습니다.
RMI
RMI를 테스트하기 위해 [https://cloud.docker.com/repository/docker/summ1t/jmxrmi_vulnerable/general]에서 가져올 수 있는 docker 이미지를 만들었습니다. 이 이미지는 포트 1617에서 RMI를 수신하는 호스트를 실행합니다. 취약한 Java 8u40을 실행 중입니다. EnumJavaLibs가 이 라이브러리를 원격으로 발견할 수 있음을 보여주기 위해 클래스패스에 nanohttpd-2.2.0.jar 라이브러리가 로드되어 있습니다(로컬 저장소에 이 jar를 준비했다고 가정할 때).