Welcome to Our Website

Forstå Java-De-serialisering

Som vi har sett ovenfor, er koden gir en feil «Exception in thread «main» java.lang.ClassCastException: testserialization.ExploitDeser kan ikke bli kastet til testserialization.Ansatt» som betyr at den type casting er ikke riktig imidlertid koden fortsatt blir utført. Den readObject funksjon av DeserializeDemo klasse er i stand til å utføre tilpasset implementering av readObject av ExploitDeser klasse.,

Dette er hva som er usikkert deserialisering her, at selv om det er en type casting feil likevel om serialisert dataene i et egendefinert klasse med en tilpasset gjennomføring av readObject er gitt som inndata, det blir utført som vist ovenfor.

Dette er hva som er gjort av den gadget kjeder brukes av ysoserial og andre java-deserialisering utnyttelse verktøy der de ser for kjeding av klasser til slutt landet i en egendefinert implementering av readObject som kan utføre system nivå-koden som leveres som en del av brukerens input.,

Utbedring

Nå, at vi har hatt en se på hva som er Deserialisering og hvordan den blir utnyttet, kan se på utbedring til dette.

avhjelpe vi kommer til å diskutere her er kalt «Look-ahead » – klasse validering» hvor vi kan godkjenne listen over klasser som vi ønsker å få deserialized. Eksempelvis. i vårt scenario som vi forventer å tillate eneste Ansatt klasse objektet data for å få deserialized og for gjenværende det bør ikke tillate deserialisering.,

Så, i utgangspunktet hva denne metoden ikke er på, overstyrer den funksjonen «resolveClass» som er en del av «ObjectInputStream»(brukt under deserialisering) klasse og utfører en hvit liste over listen av classess som trenger å bli deserialized.

Nå som vi er ferdig med teorien, kan hoppe i til gjennomføring.,

Kan opprette en ny klasse «LookAheadObjectInputStream» utvide den til å ObjectInputSteam klasse, slik at vi kan overstyre medlem funksjon resolveClass:

I koden ovenfor linjen:

if (!desc.getName().equals(Employee.class.getName())) {

er i utgangspunktet ute hvis serialisert innhold inneholder gjenstand for Ansatte klasse annet det gir feil «Uautorisert deserialisering forsøk» og hindrer gjennomføring.,

Nå, endelig endret kode for «DeserializedDemo» er som vist nedenfor:

Endret DeserializeDemo klasse

I koden ovenfor, følg den merkede koden som i stedet for å ringe ObjectInputStream klasse, LookAheadObjectInputStream klasse er å bli kalt som vil overstyre resolveClass metode under kjøring, og utfør deretter.

Nå kan du passere skadelig.,ser-fil som er opprettet tidligere som input for deserialisering og observere resultatet:

Feil i utførelsen av serialisert data av egendefinert klasse

Som du kan se ovenfor, denne gangen tilpasset implementering av readObject fra egendefinert klasse «ExploitDeser» ikke får utført under deserialisering., I stedet har vi følger med egendefinert feilmelding «Uautorisert deserialisering forsøk» som ble satt i overstyres resolveClass funksjon under LookAheadObjectInputStream klasse.

Dette er et veldig enkelt eksempel på bruk av look-ahead » – klasse validering av metoden for å hindre at usikre deserialisering. En omfattende implementering rundt denne ideen er «serialKiller» bibliotek. Linken finner du nedenfor:

Derfor, dette kan betraktes som en av løsningene for å redusere usikre deserialisering i java.,

jeg er fortsatt på jakt til andre metoder av faktorene som jeg vil blogge om senere.

Vennligst gi verdifull tilbakemelding. Frem til da holder hacking og læring….

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *