Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
ermir — Registre RMI Rogue exploitant la désérialisation Java non sécurisée via les méthodes list/lookup/bind. Génère et fournit des gadgets Ysoserial pour déclencher une exécution de code à distance sur des clients vulnérables. | Kitploit
Outils/GitHubGitHub/hakivvi/ermir
Génération de PayloadsAnalyse des VulnérabilitésExploitationTests d'Intrusion
GitHubhakivvi/ermir

ermir

Registre RMI Rogue exploitant la désérialisation Java non sécurisée via les méthodes list/lookup/bind. Génère et fournit des gadgets Ysoserial pour déclencher une exécution de code à distance sur des clients vulnérables.

Voir le dépôt
504il y a 3 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Ermir

Ermir est un registre RMI malveillant/espion, il exploite la désérialisation non sécurisée de tout code Java appelant les méthodes RMI standard sur celui-ci (list()/lookup()/bind()/rebind()/unbind()).

Prérequis

  • Ruby v3 ou plus récent.

Installation

Installez Ermir depuis rubygems.org :

root@kitploit:~
$ gem install ermir

ou clonez le dépôt et construisez la gemme :

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

Utilisation

Ermir est une gemme CLI, elle est livrée avec 2 fichiers CLI ermir et gadgetmarshal ; ermir est la gemme elle-même et ce dernier est une simple interface vers le fichier GadgetMarshaller.java qui réécrit les gadgets de Ysoserial pour répondre aux exigences de MarshalInputStream. La sortie doit ensuite être redirigée vers ermir ou un fichier. En cas de gadgets personnalisés, utilisez MarshalOutputStream au lieu de ObjectOutputStream pour écrire votre objet sérialisé dans le flux de sortie.

ermir utilisation :

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 utilisation :

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

Comment ça fonctionne ?

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

  • public Remote lookup(String name) : lookup() recherche un objet lié dans le registre par son nom. Le registre renvoie un objet Remote qui référence l'objet distant recherché. L'objet retourné est lu en utilisant MarshalInputStream.readObject() qui est simplement une autre couche par-dessus ObjectInputStream. Fondamentalement, il s'attend à ce qu'après chaque descripteur de classe/proxy (TC_CLASSDESC/TC_PROXYCLASSDESC) une URL soit fournie pour charger cette classe ou classe proxy. C'est le même bogue sauvage qui a été corrigé dans jdk7u21. (Ermir ne spécifie pas cette URL car seules les anciennes versions de Java sont vulnérables, il écrit simplement null). Comme les gadgets de Ysoserial sont sérialisés en utilisant ObjectOutputStream, Ermir utilise gadgetmarshal - un wrapper autour de - pour sérialiser le gadget spécifié afin de répondre aux exigences de .

PoC

ermir

Contribution

Les rapports de bogues et les demandes de fusion sont les bienvenus sur GitHub à l'adresse https://github.com/hakivvi/ermir. Ce projet vise à être un espace sûr et accueillant pour la collaboration, et les contributeurs sont censés adhérer au code de conduite.

Licence

La gemme est disponible en open source sous les termes de la licence MIT.

Code de conduite

Toute personne interagissant dans les bases de code, les suiveurs de problèmes, les salons de discussion et les listes de diffusion du projet Ermir est censée suivre le code de conduite.

Télécharger l’outil
GadgetMarshaller.java
MarshalInputStream
image
  • public String[] list() : list() demande au registre tous les noms des objets liés. Alors que le type String ne peut pas être remplacé par un gadget malveillant car il n'est pas comme n'importe quel objet ordinaire et n'est pas lu avec readObject() mais plutôt avec readUTF(), cependant comme list() renvoie String[] qui est un objet réel et qu'il est lu via readObject(), Ermir envoie le gadget à la place de ce type String[]. image

  • public void bind(java.lang.String $param_String_1, java.rmi.Remote $param_Remote_2) : bind() lie un objet à un nom dans le registre. Dans le cas de bind(), le type de retour est void et rien n'est retourné. Cependant, si le registre spécifie dans le paquet de données de retour RMI que ce retour est un retour exceptionnel, le client appellera readObject() malgré que le type de retour soit void. C'est ainsi que le registre envoie des exceptions à son client (généralement java.lang.ClassNotFoundException). Encore une fois, Ermir délivrera le gadget sérialisé à la place d'un objet Exception légitime. image

  • public void rebind(java.lang.String $param_String_1, java.rmi.Remote $param_Remote_2) : rebind() remplace la liaison du nom passé par la référence distante fournie, renvoie également void. Ermir renvoie une exception comme pour bind().

  • public void unbind(java.lang.String $param_String_1) : unbind() dissocie un objet distant par son nom dans le registre RMI, celui-ci renvoie aussi void.