感謝大佬關注公眾號,不勝感激
powered by UnicodeSec
簡介
環境:Weblogic 12.1.3
實戰中,大多數weblogic都部署在內網環境中,通過Nat協議使處於外網的用戶訪問。對於正常用戶訪問來說沒有問題,對於攻擊者使用T3協議回顯或者攻擊,則會出現很大問題,會提示如下
對於該問題,網上的解釋如下
解決方案是啟動weblogic時,添加一個參數 -Dweblogic.rjvm.enableprotocolswitch=true
。但是我們不可能奢求被攻擊者開啟這個參數,所以我們就需要通過其他方式去解決這個問題。
下圖錯誤堆棧
我們可以看出,需要想辦法修改t3發送的內容,將其中的公網地址和端口換為weblogic內網地址與端口。由此,延申出兩個問題
- 如何修改發送內容
- 如何根據weblogic的公網地址與端口,得到weblogic的內網地址與端口
1. 如何修改發送的協議內容
還是上圖,在WLInitialContextFactoryDelegate
中,調用var10.FindOrCreateRJVM
。最終會調用weblogic.rjvm.ConnectionManager.bootstrap
,根據提供的公網url與port去創建一個JVMID。如圖。
隨后會調用weblogic.rjvm.ConnectionManager.findOrCreateConnection
。
這里與發包的函數主要如下
首先根據連接字符串,向待連接的weblogic
服務器發送t3握手報文,返回一個MsgAbbrevJVMConnection
類。
隨后調用this.createIdentifyMsg
去生成t3協議報文,然后調用MsgAbbrevJVMConnection.sendMsg
將協議內容通過t3協議發送給weblogic服務器。weblogic.rjvm.ConnectionManager.createIdentifyMsg
的函數如下圖
我們從這里可以看出,會將JVMID var1
的值,作為t3協議的header。
我們繼續回到ConnectionManager
函數中,然后調用MsgAbbrevJVMConnection.sendMsg
函數,最終發送斷點截圖如下
所以,如果想解決T3穿透nat,我們只需要魔改JVMID
的hostAddres
s與dnsName
以及一切與地址有關的東西,還有ports的值即可完成Nat內網穿透的任務。
最簡單的辦法,魔改JVMID即可。我們可以本地創建一個JVMID
,修改里面的邏輯。
如圖所示
修改之后,重新執行一下,完美執行命令
2. 獲取weblogic內網地址與端口
這里我們需要回顧iiop協議穿透內網的知識。iiop在創建context的時候,會根據服務端返回的內網地址與端口,創建context。隨后通過context與weblogic交互時,會直接連接context中的內網地址。
在途中我們可以很明顯的看出,iiop協議會直接連接內網IP與端口,所以會爆出timeout錯誤。
在這里,我們可以通過iiop創建與服務器的連接,然后獲取其中的內網ip與port,如圖
自動獲取weblogic內網地址與端口的任務至此成功完成