漏洞分析
漏洞原理
這是經典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet請求中讀取了用戶傳入的對象,然后我們利用Apache Commons Collections中的Gadget執行任意代碼。
修復建議
更新Apache Commons Collections庫 lib地址:https://github.com/ikkisoft/SerialKiller
下載這個jar后放置於classpath,將應用代碼中的java.io.ObjectInputStream替換為SerialKiller
之后配置讓其能夠允許或禁用一些存在問題的類,SerialKiller有Hot-Reload,Whitelisting,Blacklisting幾個特性,控制了外部輸入反序列化后的可信類型。
影響范圍
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.0
環境搭建
https://github.com/vulhub/vulhub/tree/master/jboss/JMXInvokerServlet-deserialization
初始化完成后訪問http://your-ip:8080/
即可看到JBoss默認頁面。
復現
方法1
利用集成工具,一鍵getshell
https://cdn.vulhub.org/deserialization/DeserializeExploit.jar
方法2
借助ysoserial,來生成payload,發送到/invoker/readonly,可參考
https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-12149