<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
*Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να**κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=1099-pentesting-java-rmi) γιανα δημιουργήσετε εύκολα και να**αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία κοινότητας στον κόσμο.\
_Η Απομακρυσμένη Κλήση Μεθόδων Java_, ή _Java RMI_, είναι ένα μηχανισμός αντικειμενοστραφούς _RPC_ που επιτρέπει σε ένα αντικείμενο που βρίσκεται σε μία _εικονική μηχανή Java_να καλεί μεθόδους σε ένα άλλο αντικείμενο που βρίσκεται σε μια άλλη _εικονική μηχανή Java_. Αυτό επιτρέπει στους προγραμματιστές να γράφουν κατανεμημένες εφαρμογές χρησιμοποιώντας ένα αντικειμενοστραφή παράδειγμα. Μια σύντομη εισαγωγή στο _Java RMI_ από μια επιθετική οπτική γωνία μπορεί να βρεθεί σε [αυτήν την ομιλία του blackhat](https://youtu.be/t\_aw1mDNhzI?t=202).
Συνήθως, μόνο τα προεπιλεγμένα στοιχεία _Java RMI_ (το _RMI Registry_ και το _Activation System_) είναι συνδεδεμένα σε κοινές θύρες. Τα_απομακρυσμένααντικείμενα_ που υλοποιούν την πραγματική εφαρμογή _RMI_ συνήθως συνδέονται σε τυχαίες θύρες όπως φαίνεται στην παραπάνω έξοδο.
Το_nmap_ μερικές φορές αντιμετωπίζει προβλήματα στο να αναγνωρίσει υπηρεσίες _SSL_ που προστατεύονται με _RMI_. Αν αντιμετωπίσετε μια άγνωστη υπηρεσία ssl σε μια κοινή _RMI_ θύρα, θα πρέπει να εξετάσετε περαιτέρω.
Απλά, το _Java RMI_ επιτρέπει σε έναν προγραμματιστή να κάνει ένα αντικείμενο _Java_ διαθέσιμο στο δίκτυο. Αυτό ανοίγει μια _TCP_ θύρα όπου οι πελάτες μπορούν να συνδεθούν και να καλέσουν μεθόδους στο αντίστοιχο αντικείμενο. Παρόλο που αυτό ακούγεται απλό, υπάρχουν αρκετές προκλήσεις που το _Java RMI_ πρέπει να λύσει:
1. Για να διαβιβάσει μια κλήση μεθόδου μέσω _Java RMI_, οι πελάτες πρέπει να γνωρίζουν τη διεύθυνση IP, τη θύρα ακρόασης, την υλοποιημένη κλάση ή διεπαφή και το `ObjID` του στοχευμένου αντικειμένου (το `ObjID` είναι ένα μοναδικό και τυχαίο αναγνωριστικό που δημιουργείται όταν το αντικείμενο γίνεται διαθέσιμο στο δίκτυο. Απαιτείται επειδή το _Java RMI_ επιτρέπει σε πολλά αντικείμενα να ακούνε στην ίδια _TCP_ θύρα).
2.Οι απομακρυσμένοι πελάτες μπορεί να δεσμεύουν πόρους στον εξυπηρετητή καλώντας μεθόδους στο εκτεθέν αντικείμενο. Η_Java virtual machine_ πρέπει να παρακολουθεί ποιοι από αυτούς τους πόρους εξακολουθούν να χρησιμοποιούνται και ποιοι μπορούν να είναι αντικείμενα συλλογής σκουπιδιών.
Η πρώτη πρόκληση λύνεται από το _RMI registry_, το οποίο είναι βασικά ένα υπηρεσία ονοματοδότησης για το _Java RMI_. Το ίδιο το _RMI registry_ είναι επίσης μια υπηρεσία _RMI_, αλλά η υλοποιημένη διεπαφή και το `ObjID` είναι σταθερά και γνωστά από όλους τους πελάτες _RMI_. Αυτό επιτρέπει στους πελάτες _RMI_να καταναλώνουν το _RMI registry_ απλώς γνωρίζοντας την αντίστοιχη _TCP_ θύρα.
Όταν οι προγραμματιστές θέλουν να κάνουν τα _Java αντικείμενά τους_ διαθέσιμα στο δίκτυο, συνήθως τα συνδέουν σε ένα _RMI registry_. Το_registry_ αποθηκεύει όλες τις πληροφορίες που απαιτούνται για τη σύνδεση με το αντικείμενο (διεύθυνση IP, θύρα ακρόασης, υλοποιημένη κλάση ή διεπαφή και η τιμή `ObjID`) και τις καθιστά διαθέσιμες υπό ένα ανθρώπινα αναγνώσιμο όνομα (το _bound name_). Οι πελάτες που θέλουν να καταναλώσουν την υπηρεσία _RMI_ ζητούν από το _RMI registry_ το αντίστοιχο _bound name_ και το registry επιστρέφει όλες τις απαιτούμενες πληροφορίες για σύνδεση. Έτσι, η κατάσταση είναι βασικά η ίδια με μια συνηθισμένη υπηρεσία _DNS_. Το παρακάτω παράδειγμα δείχνει ένα μικρό παράδειγμα:
Το δεύτερο από τα παραπάνω αναφερόμενα προβλήματα λύνεται από τον _Κατανεμημένο Συλλέκτη Σκουπιδιών_ (_DGC_). Αυτή είναι μια άλλη υπηρεσία _RMI_ με μια γνωστή τιμή `ObjID` και είναι διαθέσιμη σε βασικά κάθε _RMI σημείο πρόσβασης_. Όταν ένας _πελάτης RMI_ αρχίζει να χρησιμοποιεί μια υπηρεσία _RMI_, στέλνει μια πληροφορία στον _DGC_ ότι το αντίστοιχο _απομακρυσμένοαντικείμενο_ χρησιμοποιείται. Ο_DGC_ μπορεί τότε να παρακολουθεί τον μετρητή αναφορών και να καθαρίζει τα ανεκχώρητα αντικείμενα.
Τα προεπιλεγμένα στοιχεία του _Java RMI_ έχουν γνωστά σημεία επίθεσης για αρκετό καιρό και υπάρχουν πολλαπλές ευπάθειες σε απαρχαιωμένες εκδόσεις _Java_. Από την άποψη του επιτιθέμενου, αυτά τα προεπιλεγμένα στοιχεία είναι ενδιαφέροντα, επειδή υλοποιούν γνωστές κλάσεις / διεπαφές και είναι εύκολο να αλληλεπιδράσετε μαζί τους. Αυτή η κατάσταση είναι διαφορετική για προσαρμοσμένες υπηρεσίες _RMI_. Για να καλέσετε έναν μέθοδο σε ένα _απομακρυσμένοαντικείμενο_, πρέπει να γνωρίζετε εκ των προτέρων την αντίστοιχη υπογραφή μεθόδου. Χωρίς να γνωρίζετε μια υπάρχουσα υπογραφή μεθόδου, δεν υπάρχει τρόπος επικοινωνίας με μια _υπηρεσία RMI_.
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) είναι ένα εργαλείο σάρωσης ευπαθειών _Java RMI_ που είναι ικανό να αναγνωρίζει αυτόματα κοινές _ευπαθείες RMI_. Όποτε εντοπίσετε ένα _RMI_ σημείο πρόσβασης, θα πρέπει να το δοκιμάσετε:
Η έξοδος της ενέργειας απαρίθμησης εξηγείται λεπτομερώς στις [σελίδες τεκμηρίωσης](https://github.com/qtc-de/remote-method-guesser/blob/master/docs/rmg/actions.md#enum-action) του έργου. Ανάλογα με το αποτέλεσμα, θα πρέπει να προσπαθήσετε να επαληθεύσετε τις εντοπισμένες ευπαθείες.
Οι τιμές `ObjID` που εμφανίζονται από το _remote-method-guesser_ μπορούν να χρησιμοποιηθούν γιανα προσδιοριστεί ο χρόνος λειτουργίας της υπηρεσίας. Αυτό μπορεί να βοηθήσει στην εντοπισμό άλλων ευπαθειών:
Ακόμα και όταν δεν έχουν εντοπιστεί ευπαθείες κατά τη διάρκεια της απαρίθμησης, οι διαθέσιμες υπηρεσίες _RMI_ ενδέχεται να αποκαλύπτουν επικίνδυνες λειτουργίες. Επιπλέον, παρόλο που η επικοινωνία _RMI_ με τα προεπιλεγμένα στοιχεία _RMI_ προστατεύεται από φίλτρα αποσειριοποίησης, όταν γίνεται λόγος για προσαρμοσμένες υπηρεσίες _RMI_, τέτοια φίλτρα συνήθως δεν υπάρχουν. Η γνώση των έγκυρων υπογραφών μεθόδων στις υπηρεσίες _RMI_ είναι επομένως πολύτιμη.
Δυστυχώς, το _Java RMI_ δεν υποστηρίζει την απαρίθμηση μεθόδων σε _απομακρυσμένααντικείμενα_. Ωστόσο, είναι δυνατόν να εξαναγκαστεί η υπογραφή μεθόδων με εργαλεία όπως το [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) ή το [rmiscout](https://github.com/BishopFox/rmiscout):
Εκτός από τη μάντεψη, θα πρέπει επίσης να ψάξετε σε μηχανές αναζήτησης ή στο _GitHub_για τη διεπαφή ή ακόμα και την υλοποίηση μιας συναντηθείσας υπηρεσίας _RMI_. Το_bound name_ και το όνομα της υλοποιημένης κλάσης ή διεπαφής μπορεί να είναι χρήσιμα εδώ.
Το [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) επισημαίνει κλάσεις ή διεπαφές ως `γνωστές` εάν αναφέρονται στην εσωτερική βάση δεδομένων του εργαλείου για γνωστές υπηρεσίες _RMI_. Σε αυτές τις περιπτώσεις μπορείτε να χρησιμοποιήσετε την ενέργεια `γνωστή`γιανα λάβετε περισσότερες πληροφορίες σχετικά με την αντίστοιχη υπηρεσία _RMI_:
Χρησιμοποιήστε το [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=1099-pentesting-java-rmi) γιανα κατασκευάσετε εύκολα και να**αυτοματοποιήσετε ροές εργασίας** με τα πιο προηγμένα εργαλεία της κοινότητας.\
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
*Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να**κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.