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
ermir — Registro RMI Rogue che sfrutta la deserializzazione Java non sicura tramite i metodi list/lookup/bind. Genera e fornisce gadget Ysoserial per attivare l'esecuzione di codice remoto su client vulnerabili. | Kitploit
Strumenti/GitHubGitHub/hakivvi/ermir
Generazione di PayloadAnalisi delle VulnerabilitàExploitPenetration Testing
GitHubhakivvi/ermir

ermir

Registro RMI Rogue che sfrutta la deserializzazione Java non sicura tramite i metodi list/lookup/bind. Genera e fornisce gadget Ysoserial per attivare l'esecuzione di codice remoto su client vulnerabili.

Vedi Repository
5043 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

Ermir

Ermir è un Evil/Rogue RMI Registry, sfrutta la deserializzazione non sicura su qualsiasi codice Java che chiami metodi RMI standard su di esso (list()/lookup()/bind()/rebind()/unbind()).

Requisiti

  • Ruby v3 o successivo.

Installazione

Installa Ermir da rubygems.org:

root@kitploit:~
$ gem install ermir

oppure clona il repository e costruisci la gemma:

root@kitploit:~
$ git clone https://github.com/hakivvi/ermir.git
$ rake install

Utilizzo

Ermir è una gemma CLI, include 2 file CLI: ermir e gadgetmarshal. ermir è la gemma vera e propria, mentre quest'ultimo è solo un'interfaccia grafica per il file GadgetMarshaller.java che riscrive i gadget di Ysoserial per soddisfare i requisiti di MarshalInputStream. L'output dovrebbe quindi essere reindirizzato in ermir o in un file; in caso di gadget personalizzati, usa MarshalOutputStream invece di ObjectOutputStream per scrivere l'oggetto serializzato nello stream di output.

ermir usage:

root@kitploit:~
➜  ~ ermir
Ermir by @hakivvi * https://github.com/hakivvi/ermir.
Info:
    Ermir is a Rogue/Evil RMI Registry which exploits unsecure Java deserialization on any Java code calling standard RMI methods on it.
Usage: ermir [options]
    -l, --listen   bind the RMI Registry to this ip and port (default: 0.0.0.0:1099).
    -f, --file     path to file containing the gadget to be deserialized.
    -p, --pipe     read the serialized gadget from the standard input stream.
    -v, --version  print Ermir version.
    -h, --help     print options help.
Example:
    $ gadgetmarshal /path/to/ysoserial.jar Groovy1 calc.exe | ermir --listen 127.0.0.1:1099 --pipe

gadgetmarshal usage:

root@kitploit:~
➜  ~ gadgetmarshal
Usage: gadgetmarshal /path/to/ysoserial.jar Gadget1 cmd (optional)/path/to/output/file

Come funziona?

java.rmi.registry.Registry offre 5 metodi: list(), lookup(), bind(), rebind(), unbind():

  • public Remote lookup(String name): lookup() cerca un oggetto associato nel registro tramite il suo nome, il registro restituisce un oggetto Remote che fa riferimento all'oggetto remoto cercato. L'oggetto restituito viene letto usando MarshalInputStream.readObject(), che è solo un ulteriore livello sopra ObjectInputStream. In pratica, si aspetta che dopo ogni descrittore di classe/proxy (TC_CLASSDESC/TC_PROXYCLASSDESC) venga fornito un URL che sarà usato per caricare questa classe o classe proxy. Questo è lo stesso bug selvaggio che è stato corretto in jdk7u21. (Ermir non specifica questo URL poiché solo le versioni Java più vecchie sono vulnerabili; invece scrive semplicemente null). Poiché i gadget di Ysoserial vengono serializzati usando ObjectOutputStream, Ermir utilizza gadgetmarshal - un wrapper intorno a GadgetMarshaller.java - per serializzare il gadget specificato in modo che soddisfi i requisiti di .

PoC

ermir

Contributi

Le segnalazioni di bug e le richieste pull sono benvenute su GitHub all'indirizzo https://github.com/hakivvi/ermir. Questo progetto intende essere uno spazio sicuro e accogliente per la collaborazione, e ci si aspetta che i contributori seguano il codice di condotta.

Licenza

La gemma è disponibile come open source secondo i termini della Licenza MIT.

Codice di Condotta

Ci si aspetta che chiunque interagisca nei codebase, nei tracker delle issue, nelle chat room e nelle mailing list del progetto Ermir segua il codice di condotta.

Scarica lo strumento
MarshalInputStream
image
  • public String[] list(): list() chiede al registro tutti i nomi degli oggetti associati. Mentre il tipo String non può essere sostituito con un gadget dannoso perché non è come un normale oggetto e non viene letto usando readObject() ma piuttosto readUTF(), tuttavia, poiché list() restituisce String[], che è un vero oggetto e viene letto usando readObject(), Ermir invia il gadget al posto di questo tipo String[]. image

  • public void bind(java.lang.String $param_String_1, java.rmi.Remote $param_Remote_2): bind() associa un oggetto a un nome nel registro. Nel caso di bind(), il tipo restituito è void e non viene restituito nulla. Tuttavia, se il registro specifica nel pacchetto di dati di ritorno RMI che questo ritorno è un ritorno eccezionale, il client/server chiamerà readObject() nonostante il tipo restituito sia void. Questo è il modo in cui il registro invia eccezioni al suo client (di solito java.lang.ClassNotFoundException). Ancora una volta, Ermir consegnerà il gadget serializzato invece di un legittimo oggetto Exception. image

  • public void rebind(java.lang.String $param_String_1, java.rmi.Remote $param_Remote_2): rebind() sostituisce l'associazione del nome passato con il riferimento remoto fornito; anche questo restituisce void. Ermir restituisce un'eccezione proprio come per bind().

  • public void unbind(java.lang.String $param_String_1): unbind() rimuove un oggetto remoto dal registro RMI in base al nome; anche questo restituisce void.