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)
Σε αυτή την ΑΝΑΡΤΗΣΗ θα εξηγηθεί ένα παράδειγμα χρησιμοποιώντας java.io.Serializable
.
Η διεπαφή Java Serializable
(java.io.Serializable
είναι μια διεπαφή σήμανσης που οι κλάσεις σας πρέπει να υλοποιούν αν θέλουν να είναι serializable και deserializable. Η σειριοποίηση αντικειμένων Java (γραφή) γίνεται με το ObjectOutputStream και η αποσειριοποίηση (ανάγνωση) γίνεται με το ObjectInputStream.
Ας δούμε ένα παράδειγμα με μια κλάση Person που είναι serializable. Αυτή η κλάση υπερκαλύπτει τη συνάρτηση readObject, έτσι όταν οποιοδήποτε αντικείμενο αυτής της κλάσης είναι deserialized αυτή η συνάρτηση θα εκτελείται.
Στο παράδειγμα, η συνάρτηση readObject της κλάσης Person καλεί τη συνάρτηση eat()
του κατοικίδιου του και η συνάρτηση eat()
ενός Σκύλου (για κάποιο λόγο) καλεί ένα calc.exe. Θα δούμε πώς να σειριοποιήσουμε και να αποσειριοποιήσουμε ένα αντικείμενο Person για να εκτελέσουμε αυτόν τον υπολογιστή:
Το παρακάτω παράδειγμα είναι από https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Όπως μπορείτε να δείτε σε αυτό το πολύ βασικό παράδειγμα, η "ευπάθεια" εδώ εμφανίζεται επειδή η readObject συνάρτηση καλεί άλλες ευάλωτες συναρτήσεις.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)