Basic Java Deserialization (ObjectInputStream, readObject)
Σε αυτήν την ΑΝΑΡΤΗΣΗ θα εξηγηθεί ένα παράδειγμα χρησιμοποιώντας το java.io.Serializable
.
Serializable
Η διεπαφή Java Serializable
(java.io.Serializable
είναι μια δείκτης διεπαφή που πρέπει να υλοποιούν οι κλάσεις σας αν θέλετε να γίνεται σειριοποίηση και αποσειριοποίηση. Η σειριοποίηση αντικειμένων Java (εγγραφή) γίνεται με το ObjectOutputStream και η αποσειριοποίηση (ανάγνωση) γίνεται με το ObjectInputStream.
Ας δούμε ένα παράδειγμα με μια κλάση Person που είναι σειριοποιήσιμη. Αυτή η κλάση αντικαθιστά τη συνάρτηση readObject, οπότε όταν οποιοδήποτε αντικείμενο αυτής της κλάσης αποσειριοποιείται, αυτή η συνάρτηση θα εκτελεστεί.
Στο παράδειγμα, η συνάρτηση readObject της κλάσης Person καλεί τη συνάρτηση eat()
του κατοικίδιου της και η συνάρτηση eat()
ενός σκύλου (για κάποιο λόγο) καλεί ένα calc.exe. Θα δούμε πώς να σειριοποιήσουμε και αποσειριοποιήσουμε ένα αντικείμενο Person για να εκτελέσουμε αυτό τον αριθμομηχανή:
Το παρακάτω παράδειγμα είναι από το https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649
Συμπέρασμα
Όπως μπορείτε να δείτε σε αυτό το πολύ βασικό παράδειγμα, η "ευπάθεια" εδώ εμφανίζεται επειδή η συνάρτηση readObject καλεί άλλες ευπάθεις συναρτήσεις.
Last updated