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 è 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 questa calcolatrice:
Il seguente esempio è tratto da https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Come puoi vedere in questo esempio molto semplice, 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)