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
ermir — Rogue RMI Registry explorando desserialização Java insegura através dos métodos list/lookup/bind. Gera e entrega gadgets do Ysoserial para desencadear execução remota de código em clientes vulneráveis. | Kitploit
Ferramentas/GitHubGitHub/hakivvi/ermir
Geração de PayloadsAnálise de VulnerabilidadesExploraçãoTestes de Penetração
GitHubhakivvi/ermir

ermir

Rogue RMI Registry explorando desserialização Java insegura através dos métodos list/lookup/bind. Gera e entrega gadgets do Ysoserial para desencadear execução remota de código em clientes vulneráveis.

Ver Repositório
504há 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

Ermir

Ermir é um Registro RMI Maligno/Rogue, que explora desserialização insegura em qualquer código Java que chame métodos RMI padrão nele (list()/lookup()/bind()/rebind()/unbind()).

Requisitos

  • Ruby v3 ou mais recente.

Instalação

Instale o Ermir a partir do rubygems.org:

root@kitploit:~
$ gem install ermir

ou clone o repositório e construa a gem:

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

Uso

Ermir é uma gem de CLI, vem com 2 arquivos CLI ermir e gadgetmarshal, ermir é a gem real e o último é apenas uma interface elegante para o arquivo GadgetMarshaller.java que reescreve os gadgets de Ysoserial para atender aos requisitos de MarshalInputStream, a saída deve ser então canalizada para ermir ou um arquivo; no caso de gadgets personalizados, use MarshalOutputStream em vez de ObjectOutputStream para escrever seu objeto serializado para o fluxo de saída.

Uso de ermir:

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

Uso de gadgetmarshal:

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

Como funciona?

java.rmi.registry.Registry oferece 5 métodos: list(), lookup(), bind(), rebind(), unbind():

  • public Remote lookup(String name): lookup() procura um objeto vinculado no registro pelo seu nome, o registro retorna um objeto Remote que referencia o objeto remoto que foi procurado, o objeto retornado é lido usando MarshalInputStream.readObject() que é apenas outra camada sobre ObjectInputStream, basicamente espera que após cada descritor de classe/proxy (TC_CLASSDESC/TC_PROXYCLASSDESC) uma URL que será usada para carregar essa classe ou classe proxy. Este é o mesmo bug selvagem que foi corrigido em jdk7u21. (Ermir não especifica esta URL, pois apenas versões antigas do Java são vulneráveis, em vez disso apenas escreve null). Como os gadgets do Ysoserial estão sendo serializados usando ObjectOutputStream, Ermir usa gadgetmarshal - um wrapper em torno de GadgetMarshaller.java - para serializar o gadget especificado para atender aos requisitos de .

PoC

ermir

Contribuindo

Relatórios de bugs e pull requests são bem-vindos no GitHub em https://github.com/hakivvi/ermir. Este projeto é destinado a ser um espaço seguro e acolhedor para colaboração, e espera-se que os contribuidores sigam o código de conduta.

Licença

A gem está disponível como código aberto sob os termos da Licença MIT.

Código de Conduta

Todos que interagem nos codebases do projeto Ermir, rastreadores de issues, salas de bate-papo e listas de discussão devem seguir o código de conduta.

Baixar ferramenta
MarshalInputStream
image
  • public String[] list(): list() pergunta ao registro por todos os nomes dos objetos vinculados, enquanto o tipo String não pode ser substituído por um gadget malicioso, pois não é como qualquer objeto comum e não é lido usando readObject() mas sim readUTF(), no entanto, como list() retorna String[] que é um objeto real e é lido usando readObject(), Ermir envia o gadget em vez deste tipo String[]. image

  • public void bind(java.lang.String $param_String_1, java.rmi.Remote $param_Remote_2): bind() vincula um objeto a um nome no registro, no caso de bind() o tipo de retorno é void e nada é retornado, no entanto, se o registro especificar no pacote de dados de retorno RMI que este retorno é um retorno excepcional, o cliente/servidor cliente chamará readObject() apesar do tipo de retorno ser void, é assim que o registro envia exceções para seu cliente (normalmente java.lang.ClassNotFoundException), mais uma vez Ermir entregará o gadget serializado em vez de um objeto Exception legítimo. image

  • public void rebind(java.lang.String $param_String_1, java.rmi.Remote $param_Remote_2): rebind() substitui a vinculação do nome passado pela referência remota fornecida, também retorna void, Ermir retorna uma exceção assim como bind().

  • public void unbind(java.lang.String $param_String_1): unbind() desvincula um objeto remoto pelo nome no registro RMI, este também retorna void.