Basic Java Deserialization (ObjectInputStream, readObject)
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
In diesem POST wird ein Beispiel mit java.io.Serializable
erklärt.
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
Wie Sie in diesem sehr einfachen Beispiel sehen können, entsteht die "Schwachstelle" hier, weil die readObject-Funktion andere anfällige Funktionen aufruft.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)