som det ses ovenfor, giver koden en fejl “undtagelse i tråd “main” java.lang.ClassCastException: testserialization.E .ploitdeser kan ikke kastes til testserialisering.Medarbejder ” hvilket betyder, at typestøbningen ikke er korrekt, men koden udføres stadig. ReadObject-funktionen af Deserialiededemo-klassen er i stand til at udføre den tilpassede implementering af readObject af E .ploitdeser-klassen.,
Dette er, hvad er de usikre deserialization her, at selvom der er en type-casting fejl stadig, hvis føljeton data af en brugerdefineret klasse med en tilpasset implementering af readObject leveres som input, det bliver udført som vist ovenfor.
Dette er hvad der er udført af den gadget, kæder, der anvendes af ysoserial og andre java deserialization udnyttelse værktøjer, hvor de ser ud til at kæde af klasser til endelig landet i en tilpasset implementering af readObject, som kan udføre system niveau-kode, der leveres som en del af brugerens input.,
Afhjælpning
Nu, at vi har haft et kig på, hvad der er Deserialization, og hvordan det bliver udnyttet, lad os se på oprydning til dette.
den afhjælpning, vi skal diskutere her, kaldes “Look-ahead class validation”, hvor vi kan hvidliste listen over klasser, som vi ønsker at blive deserialiseret. Eksempel. i vores scenarie ville vi forvente at tillade kun medarbejder klasse objekt data for at få deseriali .ed og for resterende Det bør ikke tillade deseriali .ation.,
Så, dybest set, hvad denne metode gør, er, at det tilsidesætter funktionen “resolveClass”, som er en del af “ObjectInputStream”(bruges i deserialization) klasse og udfører en hvid liste over listen af classess, der skal være deserialized.
nu hvor vi er færdige med teorien, lad os hoppe ind på implementeringen.,
lad os oprette en ny klasse “LookAheadObjectInputStream” udvide det til ObjectInputSteam klassen, så vi kan tilsidesætte den pågældende funktion resolveClass:
I ovenstående kode linje:
if (!desc.getName().equals(Employee.class.getName())) {
er dybest set søger, hvis føljeton indhold, der indeholder objekter af Medarbejder klasse ellers giver fejl “Uautoriseret deserialization forsøg” og forhindrer dens fuldbyrdelse.,
Nu, den endelige ændrede kode for “DeserializedDemo” er som vist nedenfor:
I ovenstående kode, observere fremhævet kode, som i stedet for at kalde den ObjectInputStream klasse, LookAheadObjectInputStream klassen bliver kaldt, som vil tilsidesætte resolveClass metode under kørsel og udføre i overensstemmelse hermed.
nu, lad os passere den ondsindede.,ser fil, der er oprettet tidligere som input til deserialisering og overholder output:
Som det kan ses ovenfor, denne gang tilpasset implementering af readObject fra custom class “ExploitDeser” ikke bliver udført i løbet af deserialisering., Vi er i stedet forsynet med den brugerdefinerede fejlmeddelelse “Uautoriseret deserialization forsøg”, som blev sat i tilsidesættes resolveClass funktion under LookAheadObjectInputStream klasse.
Dette er et meget simpelt eksempel på at bruge look-ahead klasse valideringsmetode for at forhindre usikker deserialisering. En omfattende implementering omkring denne ID.er biblioteket” serialKiller”. Link kan findes nedenfor:
derfor kan dette betragtes som en af løsningerne for at afbøde usikker deserialisering i java.,
jeg undersøger stadig andre metoder til afhjælpning, som jeg vil blogge om senere.
giv din værdifulde feedback. Indtil da holde hacking og læring….