Welcome to Our Website

megértése Java de-serialization

mint fent látható, a kód ad egy hiba “kivétel szál” fő ” java.lang.ClassCastException: testserialization.Az exploitdesert nem lehet tesztelniszerializáció.Alkalmazott ” ami azt jelenti, hogy a típusöntés nem megfelelő, azonban a kód továbbra is végrehajtásra kerül. A deserializedemo osztály readObject funkciója képes végrehajtani az ExploitDeser osztály readObject egyedi végrehajtását.,

Ez az, amit a bizonytalan deserialization itt, hogy annak ellenére, hogy van egy Típus-casting hiba még ha sorosított adatokat egy egyéni osztály egyéni megvalósítása readObject van megadva bemenetként, ez lesz végrehajtva, mint fent látható.

Ez az, amit a gadget láncok által használt ysoserial és más java deserialization kizsákmányolás eszközök, ahol keresnek láncolás osztályok végül leszállni egy egyéni megvalósítása readObject amely képes végrehajtani a rendszer szintű kódot részeként a felhasználói bemenet.,

kármentesítés

most, hogy megnéztük, mi a Dezerializáció és hogyan hasznosítják, nézzük meg a kármentesítést.

a kármentesítés fogunk beszélni itt az úgynevezett “look-ahead class validation”, ahol tudjuk whitelist az osztályok listáját, hogy szeretnénk, hogy deserialized. Például. a mi forgatókönyvünkben arra számítunk, hogy csak a munkavállalói osztály objektumadatait hagyjuk dezerializálódni, a fennmaradó rész pedig nem teszi lehetővé a dezerializációt.,

tehát alapvetően ez a módszer felülbírálja a “resolveClass” függvényt, amely az “ObjectInputStream”(a deserialization során használt) osztály része, és elvégzi a deserialized-hez szükséges classess listájának fehér felsorolását.

most, hogy végeztünk az elmélettel, ugorjunk be a megvalósításba.,

lehetővé teszi, hogy hozzon létre egy új osztály “LookAheadObjectInputStream”kiterjeszteni ObjectInputSteam osztály úgy, hogy tudjuk felülírni a tag funkció resolveClass:

a fenti kódot a sor:

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

alapvetően keresi, ha serialized tartalom tartalmazza objektum munkavállalói osztály mást ad hiba” jogosulatlan deserialization kísérlet”, és megakadályozza annak végrehajtását.,

Most, a végső módosított kódját “DeserializedDemo” az alábbiak szerint:

Módosított DeserializeDemo osztály

A fenti kód, megfigyelni a kiemelt kódot, amely ahelyett, hogy hívja az ObjectInputStream osztály, LookAheadObjectInputStream osztály egyre hívott, amely felülírja a resolveClass módszer a futás során, s ennek megfelelően végrehajtani.

most, lehetővé teszi, hogy adja át a rosszindulatú.,ser létrehozott fájl korábban, mint bemenet deserialization, valamint tartsa be a kimenet:

Hiba végrehajtása megjelent adatok az egyéni osztály

a fentiek alapján látható, ezúttal az egyéni végrehajtása readObject az egyéni osztály “ExploitDeser” nem kap alatt végrehajtott deserialization., Ehelyett az “illetéktelen dezerializációs kísérlet” egyéni hibaüzenetet kapjuk, amelyet a lookaheadobjectinputstream osztály felülbírált resolveClass funkciójában állítottunk be.

Ez egy nagyon egyszerű példa a look-ahead class validation módszer használatára a nem biztonságos deserialization megelőzése érdekében. Az ötlet széles körű megvalósítása a “serialKiller” könyvtár. A Link az alábbiakban található:

ezért ez az egyik megoldás a java bizonytalan dezerializációjának enyhítésére.,

még mindig más enyhítési módszereket keresek, amelyekről később blogolni fogok.

kérjük, adja meg értékes visszajelzését. Addig is folytasd a hackelést és a tanulást….

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük