<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice.\
_Java Remote Method Invocation_, ili _Java RMI_, je mehanizam objektno orijentisanog _RPC_-a koji omogućava objektu smeštenom u jednoj _Java virtuelnoj mašini_ da poziva metode na objektu smeštenom u drugoj _Java virtuelnoj mašini_. Ovo omogućava programerima da pišu distribuirane aplikacije koristeći objektno orijentisan paradigmu. Kratak uvod u _Java RMI_ sa ofanzivne perspektive može se pronaći u [ovom blackhat govoru](https://youtu.be/t\_aw1mDNhzI?t=202).
Obično su samo podrazumevane _Java RMI_ komponente (RMI registar i Aktivacioni sistem) vezane za uobičajene portove. _Udaljeni objekti_ koji implementiraju stvarnu _RMI_ aplikaciju obično su vezani za nasumične portove, kao što je prikazano u prethodnom izlazu.
_nmap_ ponekad ima problema sa identifikovanjem _SSL_ zaštićenih _RMI_ servisa. Ako naiđete na nepoznat ssl servis na uobičajenom _RMI_ portu, trebalo bi dalje istražiti.
Da bismo to pojednostavili, _Java RMI_ omogućava programeru da učini _Java objekat_ dostupnim na mreži. To otvara _TCP_ port na kojem klijenti mogu da se povežu i pozivaju metode na odgovarajućem objektu. Iako ovo zvuči jednostavno, postoje nekoliko izazova koje _Java RMI_ mora da reši:
1. Da bi prosledili poziv metode putem _Java RMI_-ja, klijenti moraju znati IP adresu, slušajući port, implementiranu klasu ili interfejs i `ObjID` ciljanog objekta (ObjID je jedinstveni i nasumični identifikator koji se kreira kada je objekat dostupan na mreži. Potreban je jer _Java RMI_ dozvoljava više objekata da slušaju na istom _TCP_ portu).
2. Udaljeni klijenti mogu alocirati resurse na serveru pozivajući metode na izloženom objektu. _Java virtuelna mašina_ mora pratiti koje od ovih resursa su još uvek u upotrebi i koje od njih mogu biti sakupljeni smeće.
Prvi izazov je rešen _RMI registrom_, koji je zapravo servis za imenovanje za _Java RMI_. Sam _RMI registar_ takođe je _RMI servis_, ali implementisani interfejs i `ObjID` su fiksni i poznati svim _RMI_ klijentima. To omogućava _RMI_ klijentima da koriste _RMI_ registar samo znajući odgovarajući _TCP_ port.
Kada programeri žele da njihovi _Java objekti_ budu dostupni unutar mreže, obično ih vezuju za _RMI registar_. Registar čuva sve informacije potrebne za povezivanje sa objektom (IP adresa, slušajući port, implementirana klasa ili interfejs i vrednost `ObjID`) i čini ih dostupnim pod ljudski čitljivim imenom (vezano ime). Klijenti koji žele da koriste _RMI servis_ traže od _RMI registra_ odgovarajuće _vezano ime_, a registar vraća sve potrebne informacije za povezivanje. Dakle, situacija je suštinski ista kao sa običnim _DNS_ servisom. Sledeći prikazuje mali primer:
Drugi od pomenutih izazova rešava se _Distribuiranim sakupljačem smeća_ (_DGC_). Ovo je još jedna _RMI usluga_ sa dobro poznatom vrednošću `ObjID` i dostupna je na praktično svakom _RMI krajnjem tačkom_. Kada _RMI klijent_ počne da koristi _RMI uslugu_, šalje informaciju _DGC_-u da je odgovarajući _udaljeni objekat_ u upotrebi. _DGC_ može pratiti broj referenci i može očistiti nekorišćene objekte.
Podrazumevane komponente _Java RMI_-ja poznate su kao vektori napada već neko vreme i postoje višestruke ranjivosti u zastarelim verzijama _Java_-a. Sa perspektive napadača, ove podrazumevane komponente su interesantne, jer implementiraju poznate klase / interfejse i lako je moguće interagovati sa njima. Ova situacija je drugačija za prilagođene _RMI usluge_. Da biste pozvali metod na _udaljenom objektu_, morate unapred znati odgovarajući potpis metoda. Bez poznavanja postojećeg potpisa metoda, nema načina za komunikaciju sa _RMI uslugom_.
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) je alat za skeniranje ranjivosti _Java RMI_-ja koji je sposoban da automatski identifikuje uobičajene _RMI ranjivosti_. Kada identifikujete _RMI_ krajnju tačku, trebalo bi da probate:
Izlaz akcije enumeracije je detaljnije objašnjen na [stranicama dokumentacije](https://github.com/qtc-de/remote-method-guesser/blob/master/docs/rmg/actions.md#enum-action) projekta. Na osnovu rezultata, trebalo bi da pokušate da potvrdite identifikovane ranjivosti.
Vrednosti `ObjID` koje prikazuje _remote-method-guesser_ mogu se koristiti za određivanje vremena rada usluge. Ovo može omogućiti identifikaciju drugih ranjivosti:
Čak i kada tokom enumeracije nisu identifikovane ranjivosti, dostupne _RMI_ usluge i dalje mogu otkriti opasne funkcije. Štaviše, iako je komunikacija _RMI_ sa podrazumevanim komponentama zaštićena filterima za deserializaciju, kada se radi sa prilagođenim _RMI_ uslugama, takvi filteri obično nisu na snazi. Poznavanje validnih potpisa metoda na _RMI_ uslugama stoga ima vrednost.
Nažalost, _Java RMI_ ne podržava enumeraciju metoda na _udaljenim objektima_. Ipak, moguće je pokušati sa brutalnom silom potpise metoda pomoću alatki poput [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) ili [rmiscout](https://github.com/BishopFox/rmiscout):
Pored pogađanja, takođe treba pretražiti pretraživače ili _GitHub_ za interfejs ili čak implementaciju naiđenog _RMI_ servisa. _Bound name_ i ime implementovane klase ili interfejsa mogu biti od pomoći ovde.
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) označava klase ili interfejse kao `poznate` ako su navedeni u internoj bazi podataka poznatih _RMI servisa_ alata. U tim slučajevima možete koristiti akciju `poznato` da biste dobili više informacija o odgovarajućem _RMI servisu_:
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**