<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 **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](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 **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** uz pomoć najnaprednijih alata 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žete pronaći u [ovom blackhat govoru](https://youtu.be/t\_aw1mDNhzI?t=202).
Obično su samo podrazumevane komponente _Java RMI_ (RMI registar i Aktivacioni sistem) vezane za uobičajene portove. Udaljeni objekti koji implementiraju stvarnu _RMI_ aplikaciju obično su vezani za slučajne portove, kao što je prikazano u prethodnom izlazu.
_nmap_ ponekad ima problema sa identifikacijom _SSL_ zaštićenih _RMI_ servisa. Ako naiđete na nepoznat ssl servis na uobičajenom _RMI_ portu, trebali biste 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 se klijenti mogu povezati i pozivati metode na odgovarajućem objektu. Iako zvuči jednostavno, postoje nekoliko izazova koje _Java RMI_ mora rešiti:
1. Da bi se izvršio poziv metode putem _Java RMI_, klijenti moraju znati IP adresu, slušajući port, implementiranu klasu ili interfejs i `ObjID` ciljanog objekta (ObjID je jedinstveni i slučajni identifikator koji se kreira kada se objekat stavi na mrežu. Potreban je jer _Java RMI_ omogućava više objekata da slušaju na istom _TCP_ portu).
2. Udaljeni klijenti mogu alocirati resurse na serveru pozivanjem metoda na izloženom objektu. _Java virtuelna mašina_ mora pratiti koje od ovih resursa su još uvek u upotrebi, a koje od njih mogu biti prikupljeni smećem.
Prvi izazov je rešen pomoću _RMI registra_, koji je zapravo servis za imenovanje _Java RMI_. Sam _RMI registar_ takođe je _RMI servis_, ali implementirani 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 svoje _Java objekte_ učine dostupnim u mreži, 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 praktično ista kao i sa običnom _DNS_ uslugom. Sledeći primer prikazuje mali primer:
Drugi od navedenih izazova rešava se preko _Distributed Garbage Collector_ (_DGC_). Ovo je još jedna _RMI usluga_ sa poznatom vrednošću `ObjID` i dostupna je na praktično svakom _RMI endpointu_. Kada _RMI klijent_ počne koristiti _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_-a su poznati vektori napada već neko vreme i postoje višestruke ranjivosti u zastarelim verzijama _Java_-e. Sa perspektive napadača, ove podrazumevane komponente su interesantne jer implementiraju poznate klase / interfejse i lako je moguće da se sa njima interaguje. 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 skener ranjivosti _Java RMI_-a koji je sposoban da automatski identifikuje uobičajene _RMI ranjivosti_. Kada identifikujete _RMI_ endpoint, trebali biste ga isprobati:
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. Ovisno o rezultatu, trebali biste pokušati provjeriti identificirane ranjivosti.
Vrijednosti `ObjID` koje prikazuje _remote-method-guesser_ mogu se koristiti za određivanje vremena rada usluge. To može omogućiti identifikaciju drugih ranjivosti:
Čak i kada nisu identifikovane ranjivosti tokom enumeracije, dostupne _RMI_ usluge mogu i dalje izlagati opasne funkcije. Osim toga, iako je komunikacija _RMI_ prema podrazumevanim komponentama zaštićena filterima za deserijalizaciju, kada se radi sa prilagođenim _RMI_ uslugama, takvi filteri obično nisu prisutni. Poznavanje validnih potpisa metoda na _RMI_ uslugama je stoga vredno.
Nažalost, _Java RMI_ ne podržava enumeraciju metoda na daljinskim objektima. Međutim, moguće je pokušati sa brutalnom silom metoda koristeći alate poput [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) ili [rmiscout](https://github.com/BishopFox/rmiscout):
Osim pogađanja, takođe biste trebali pretraživati pretraživače ili _GitHub_ za interfejs ili čak implementaciju naiđenog _RMI_ servisa. Ovdje mogu biti korisni "bound name" i naziv implementirane klase ili interfejsa.
[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 alata za poznate _RMI servise_. U tim slučajevima možete koristiti akciju `known` 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.\
<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 **oglašavanje vaše kompanije u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Pogledajte [**PLANOVE ZA PRETPLATU**](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 **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.