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)
In questo POST verrà spiegato un esempio utilizzando java.io.Serializable
.
L'interfaccia Java Serializable
(java.io.Serializable
è un'interfaccia marker che le tue classi devono implementare se devono essere serializzate e deserializzate. La serializzazione degli oggetti Java (scrittura) viene eseguita con ObjectOutputStream e la deserializzazione (lettura) viene eseguita con ObjectInputStream.
Vediamo un esempio con una classe Person che è serializzabile. Questa classe sovrascrive la funzione readObject, quindi quando qualunque oggetto di questa classe viene deserializzato, questa funzione verrà eseguita.
Nell'esempio, la funzione readObject della classe Person chiama la funzione eat()
del suo animale domestico e la funzione eat()
di un Cane (per qualche motivo) chiama un calc.exe. Vedremo come serializzare e deserializzare un oggetto Person per eseguire questo calcolatore:
Il seguente esempio è tratto da https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Come puoi vedere in questo esempio molto basilare, la "vulnerabilità" qui appare perché la funzione readObject sta chiamando altre funzioni vulnerabili.
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)