Basic Java Deserialization (ObjectInputStream, readObject)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
En esta PUBLICACIÓN se va a explicar un ejemplo usando java.io.Serializable
.
La interfaz Java Serializable
(java.io.Serializable
es una interfaz de marcador que tus clases deben implementar si van a ser serializadas y deserializadas. La serialización de objetos en Java (escritura) se realiza con el ObjectOutputStream y la deserialización (lectura) se realiza con el ObjectInputStream.
Veamos un ejemplo con una clase Persona que es serializable. Esta clase sobrescribe la función readObject, por lo que cuando cualquier objeto de esta clase es deserializado, esta función se va a ejecutar.
En el ejemplo, la función readObject de la clase Persona llama a la función eat()
de su mascota y la función eat()
de un Perro (por alguna razón) llama a un calc.exe. Vamos a ver cómo serializar y deserializar un objeto Persona para ejecutar esta calculadora:
El siguiente ejemplo es de https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Como puedes ver en este ejemplo muy básico, la "vulnerabilidad" aquí aparece porque la función readObject está llamando a otras funciones vulnerables.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)