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:
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:
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….