Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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
marshalsec — Outil d'exploitation des vulnérabilités de désérialisation Java avec des générateurs de charges utiles pour plusieurs marshallers (Jackson, XStream, SnakeYAML) et indirection de référence JNDI pour l'exécution de code à distance. | Kitploit
Outils/GitHubGitHub/mbechler/marshalsec
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionArticles et RechercheApprentissage et ÉducationRed TeamingDéveloppement de Charges Utiles
GitHubmbechler/marshalsec

marshalsec

Outil d'exploitation des vulnérabilités de désérialisation Java avec des générateurs de charges utiles pour plusieurs marshallers (Jackson, XStream, SnakeYAML) et indirection de référence JNDI pour l'exécution de code à distance.

3.7k67825il y a 1 anVérifié par Kitploit
Voir le dépôt

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

Sécurité des unmarshallers Java - Transformer vos données en exécution de code

Si vous êtes ici pour Log4Shell/CVE-2021-44228, vous voudrez peut-être en savoir plus sur les vecteurs d'exploitation et les versions des environnements d'exécution Java concernées : https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/

Article

Cela fait plus de deux ans que Chris Frohoff et Garbriel Lawrence ont présenté leurs recherches sur les vulnérabilités de désérialisation d'objets Java, qui ont finalement abouti à ce que l'on peut aisément décrire comme la plus grande vague de bugs d'exécution de code à distance de l'histoire de Java.

Les recherches sur ce sujet ont indiqué que ces vulnérabilités ne sont pas exclusives à des mécanismes aussi expressifs que la sérialisation Java ou XStream, mais que certaines pourraient éventuellement s'appliquer à d'autres mécanismes également.

Cet article présente une analyse, incluant des détails d'exploitation, de diverses bibliothèques de marshalling Java open source qui permettent (ou permettaient) l'unmarshalling de types arbitraires, fournis par l'attaquant, et montre que, quelle que soit la manière dont ce processus est effectué et quelles que soient les contraintes implicites en place, il est sujet à des techniques d'exploitation similaires.

L'article complet est disponible sur marshalsec.pdf

Avertissement

Toutes les informations et tous les codes sont fournis uniquement à des fins éducatives et/ou pour tester vos propres systèmes contre ces vulnérabilités.

Utilisation

Java 8 requis. Compilez avec maven mvn clean package -DskipTests. Exécutez comme suit

java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]

où

  • -a - génère/teste toutes les payloads pour ce marshaller
  • -t - exécute en mode test, en effectuant l'unmarshalling des payloads générées après leur génération.
  • -v - mode verbeux, p. ex. affiche également la payload générée en mode test.
  • gadget_type - Identifiant d'un gadget spécifique ; s'il est omis, affiche les gadgets disponibles pour ce marshaller.
  • arguments - Arguments spécifiques au gadget

Les générateurs de payloads pour les marshallers suivants sont inclus :

MarshallerImpact du gadget
BlazeDSAMF(0|3|X)escalade JDK uniquement vers la sérialisation Java
RCEs de diverses bibliothèques tierces
Hessian|BurlapRCEs de diverses bibliothèques tierces
CastorRCE de la bibliothèque dépendante
JacksonRCE JDK uniquement possible, RCEs de diverses bibliothèques tierces
Javaencore une RCE de bibliothèque tierce
JsonIORCE JDK uniquement
JYAMLRCE JDK uniquement
KryoRCEs de bibliothèques tierces
KryoAltStrategyRCE JDK uniquement
Red5AMF(0|3)RCE JDK uniquement
SnakeYAMLRCEs JDK uniquement
XStreamRCEs JDK uniquement
YAMLBeansRCE de bibliothèque tierce

Arguments et prérequis supplémentaires

Exécution de commandes système

  • cmd - commande à exécuter
  • args... - paramètres supplémentaires passés en arguments

Aucun prérequis.

Chargement de classes à distance (simple)

  • codebase - URL de la codebase distante
  • class - Classe à charger

Prérequis :

  • Configurez un serveur web hébergeant un classpath Java sous un certain chemin.
  • Les fichiers de classes compilés à charger doivent être servis conformément aux conventions du classpath Java.

Chargement de classes à distance (ServiceLoader)

  • service_codebase - URL de la codebase distante

Le service à charger est actuellement codé en dur sur javax.script.ScriptEngineFactory.

Prérequis :

  • Identique au chargement de classes à distance simple.
  • Nécessite également un fichier de configuration du fournisseur à l'emplacement /META-INF/javax.script.ScriptEngineFactory contenant le nom de la classe ciblée en texte brut.
  • La classe cible spécifiée doit implémenter l'interface de service javax.script.ScriptEngineFactory.

Indirection de référence JNDI

  • jndiUrl - URL JNDI sur laquelle déclencher le lookup

Prérequis :

  • Configurez une codebase distante, comme pour le chargement de classes à distance.
  • Exécutez un service de redirection de références JNDI pointant vers cette codebase - deux implémentations sont incluses : marshalsec.jndi.LDAPRefServer et RMIRefServer.
    java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
    
  • Utilisez (ldap|rmi)://host:port/obj comme jndiUrl, pointant vers l'adresse d'écoute de ce service.

Exécution des tests

Il existe quelques propriétés système qui contrôlent les arguments lors de l'exécution des tests (via maven ou lors de l'utilisation de -a)

  • exploit.codebase, par défaut http://localhost:8080/
  • exploit.codebaseClass, par défaut Exploit
  • exploit.jndiUrl, par défaut ldap://localhost:1389/obj
  • exploit.exec, par défaut /usr/bin/gedit

Les tests s'exécutent avec un SecurityManager installé qui vérifie l'exécution de commandes système ainsi que l'exécution de code provenant de codebases distantes. Pour que cela fonctionne, la classe chargée en cours d'utilisation doit déclencher une vérification du security manager.

Télécharger l’outil