Basic Java Deserialization (ObjectInputStream, readObject)
In diesem POST wird ein Beispiel mit java.io.Serializable
erklärt.
Serializable
Das Java Serializable
-Interface (java.io.Serializable
) ist ein Marker-Interface, das deine Klassen implementieren müssen, wenn sie serialisiert und deserialisiert werden sollen. Die Java-Objektserialisierung (Schreiben) erfolgt mit dem ObjectOutputStream und die Deserialisierung (Lesen) erfolgt mit dem ObjectInputStream.
Lass uns ein Beispiel mit einer Klasse Person ansehen, die serialisierbar ist. Diese Klasse überschreibt die readObject-Funktion, sodass, wenn irgendein Objekt dieser Klasse deserialisiert wird, diese Funktion ausgeführt wird.
Im Beispiel ruft die readObject-Funktion der Klasse Person die Funktion eat()
seines Haustiers auf, und die Funktion eat()
eines Hundes (aus irgendeinem Grund) ruft eine calc.exe auf. Wir werden sehen, wie man ein Person-Objekt serialisiert und deserialisiert, um diesen Rechner auszuführen:
Das folgende Beispiel stammt von https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Fazit
Wie Sie in diesem sehr einfachen Beispiel sehen können, entsteht die "Schwachstelle" hier, weil die readObject-Funktion andere anfällige Funktionen aufruft.
Last updated