Welcome to Our Website

ymmärtäminen Java de-serialisaatio

kuten yllä on nähty, koodi antaa virheen ”poikkeus säiettä” main ” java.lang.Luokkalinnoitus: testierialization.Exploitdeseriä ei voida heittää testierialisaatioon.Työntekijä ” eli tyyppivalinta ei ole asianmukaista, mutta koodi silti toteutuu. DeserializeDemo-luokan readObject-toiminto pystyy toteuttamaan ExploitDeser-luokan readObject-sovelluksen mukautetun toteutuksen.,

– Tämä on mitä on epävarma deserialization täällä, että vaikka siellä on type-casting virhe vielä, jos sarjatiedot mukautetun luokan, custom täytäntöönpano readObject annetaan syötteenä, se saa toteutettiin kuten edellä on osoitettu.

Tämä on, mitä tapahtuu gadget ketjut käytetty ysoserial ja muut java-deserialization hyödyntämistä työkaluja, joissa he etsivät ketjutus luokat lopulta maa custom täytäntöönpano readObject, jotka voivat suorittaa järjestelmän taso-koodi, osana käyttäjä syöttää.,

Puhtaanapito

Nyt, että meillä on ollut katsoa, mitä on Deserialization ja miten sitä saa hyödyntää, katsotaanpa kunnostamisen tähän.

kunnostamisen aiomme keskustella täällä kutsutaan ”Look-ahead luokan vahvistus”, jossa voimme whitelist-luetteloon luokkaa, että haluamme saada deserialized. Esimerkiksi. meidän skenaariossa odotamme antaa vain Työntekijä-luokan objektin tiedot saada deserialized ja loput se tulisi sallia deserialization.,

Joten, pohjimmiltaan, mitä tämä menetelmä ei, se ohittaa toiminto ”resolveClass”, joka on osa ”ObjectInputStream”(käytetty deserialization) luokan ja suorittaa valkoinen listaus luettelo classess, että tarvitsee olla deserialized.

nyt kun teoria on tehty, hypätään toteutukseen.,

Voit luoda uuden luokan ”LookAheadObjectInputStream” laajentaa sitä ObjectInputSteam luokan niin, että voimme ohittaa jäsen funktio-resolveClass:

edellä koodi rivi:

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

on pohjimmiltaan etsivät jos sarjoitettu sisältö sisältää kohde Työntekijä luokan muu se antaa virheen ”Luvaton deserialization yritys” ja estää sen toteuttamista.,

Nyt, lopullinen muutettu koodi ”DeserializedDemo” on kuten alla:

Muutettu DeserializeDemo class

Edellä koodi, tarkkailla korostettu koodi, joka sen sijaan, että soittaa ObjectInputStream luokan, LookAheadObjectInputStream class on saada soitin, joka ohittaa resolveClass menetelmä suorituksen aikana ja suorittaa vastaavasti.

nyt, lets pass the malicious.,ser-tiedosto on luotu aiemmin kuin tulo deserialization ja tarkkailla tuotoksen:

Virhe suorittamisen sarjatiedot custom class

Kuten voidaan nähdä edellä, tällä kertaa custom täytäntöönpano readObject alkaen mukautetun luokan ”ExploitDeser” ei ole toteutettu aikana deserialization., Sen sijaan olemme mukana mukautettuja virheilmoitus ”Luvaton deserialization yritys”, joka oli asetettu ohittaa resolveClass toiminto alla LookAheadObjectInputStream luokan.

Tämä on erittäin yksinkertainen esimerkki käyttää look-ahead-luokan validointi menetelmä estää epävarma deserialization. Laaja toteutus tämän idean ympärille on ”serialKiller” – kirjasto. Linkki löytyy alta:

siksi tätä voidaan pitää yhtenä ratkaisuna Jaavan epävarman deserialisaation lieventämiseen.,

tutkin edelleen muita lieventämiskeinoja, joista bloggaan myöhemmin.

anna arvokasta palautetta. Siihen asti jatkaa hakkerointi ja oppiminen….

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *