Welcome to Our Website

förstå Java de-serialisering

som framgår ovan ger koden ett fel ”undantag i tråd ”Huvud” java.lang.ClassCastException: testserialisering.ExploitDeser kan inte kastas till testserialisering.Anställd ” vilket innebär att typgjutningen inte är korrekt men koden blir fortfarande exekverad. ReadObject-funktionen i klassen DeserializeDemo kan utföra den anpassade implementeringen av Readobject för ExploitDeser-klassen.,

det här är vad som är den osäkra deserialiseringen här, att även om det finns ett typgjutningsfel fortfarande om serialiserade data i en anpassad klass med en anpassad implementering av readObject tillhandahålls som inmatning, blir det exekverat som visas ovan.

det här är vad som görs av gadgetkedjorna som används av ysoserial och andra java deserialization exploateringsverktyg där de letar efter kedja av klasser för att slutligen landa i en anpassad implementering av readObject som kan utföra systemnivåkod som tillhandahålls som en del av användarinmatning.,

sanering

nu, att vi har haft en titt på vad som är deserialisering och hur det blir utnyttjas, låt oss titta på saneringen till detta.

den sanering som vi kommer att diskutera här kallas ”Look-ahead class validation” där vi kan vitlista listan över klasser som vi vill bli deserialiserade. Exempelvis. i vårt scenario skulle vi förvänta oss att endast Employee class objektdata får deserialiseras och för återstående det bör inte tillåta deserialisering.,

så, i princip vad den här metoden gör är, det åsidosätter funktionen ” resolveClass ”som är en del av”ObjectInputStream” (används under deserialisering) klass och utför en vit lista över listan över klassess som måste deserialiseras.

nu när vi är klara med teorin, kan hoppa in i genomförandet.,

låter skapa en ny klass ”LookAheadObjectInputStream” utöka den till ObjectInputSteam klass så att vi kan åsidosätta medlemsfunktionen resolveClass:

i ovanstående kod raden:

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

är i princip ute om serialiserat innehåll innehåller objekt av anställd klass annat det ger fel ”obehörig deserialisering försök” och förhindrar dess genomförande.,

nu är den slutliga modifierade koden för ”DeserializedDemo” som visas nedan:

modifierad deserializedemo-klass

i ovanstående kod, observera den markerade koden där lookaheadobjectinputstream-klassen istället för att ringa objectinputstream-klassen kallas, vilket kommer att åsidosätta resolveclass-metoden under körning och exekvera i enlighet därmed.

nu, låter passera den skadliga.,ser-fil som skapats tidigare som ingång för deserialisering och observera utgången:

Fel vid utförande av serialiserade data i anpassad klass

som kan ses ovan, den här gången blir den anpassade implementeringen av readobject från den anpassade klassen ”exploitdeser” inte exekverad under deserialisering., Istället är vi försedda med det anpassade felmeddelandet ”obehörigt deserialiseringsförsök” som ställdes in i den åsidosatta resolveClass-funktionen under lookaheadobjectinputstream-klassen.

detta är ett mycket enkelt exempel på att använda look-ahead klass valideringsmetod för att förhindra osäker deserialisering. En omfattande implementering kring denna idé är” serialKiller ” – biblioteket. Länk kan hittas nedan:

därför kan detta betraktas som en av lösningarna för att mildra osäker deserialisering i java.,

jag tittar fortfarande på andra metoder för mildringar som jag kommer att blogga om senare.

vänligen ge din värdefulla feedback. Tills dess hålla hacka och lära….

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *