Java安全之JBoss反序列化漏洞分析
0x00 前言
看到網上的Jboss分析文章較少,從而激發起了興趣。前段時間一直沉迷於工具開發這塊,所以打算將jboss系列反序列化漏洞進行分析並打造成GUI的工具集。當然反序列化回顯這塊也是需要解決的一大問題之一,所以下面會出一系列文章對該漏洞的分析到工具的構造進行一個記錄。
0x01 環境搭建
首先拿CVE-2017-12149
漏洞為例,進行調試分析。
CVE-2017-12149漏洞影響版本: 5.X 及 6.X
漏洞描述
該漏洞為 Java反序列化錯誤類型,存在於 Jboss 的 HttpInvoker 組件中的 ReadOnlyAccessFilter 過濾器中。該過濾器在沒有進行任何安全檢查的情況下嘗試將來自客戶端的數據流進行反序列化,從而導致了漏洞。
調試環境搭建
遠程調試
版本要求:JBoss-EAP-7.0及其以上版本
在Jboss的bin目錄下有個standalone.bat文件,以文本的形式打開此文件,在Jboss的bin目錄下有個standalone.bat文件。
set DEBUG_MODE=false
set DEBUG_PORT_VAR=8787
false改成true就可以改成調試模式了,8787是調試模式的端口。重啟Jboss
而5.x、6.x:
jboss-6.1.0.Final/bin/run.conf 中#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
的#
即可。
為了方便這里使用
進去/vulhub-master/jboss/CVE-2017-12149
修改docker-compose.yml
文件添加8787端口
version: '2'
services:
jboss:
image: vulhub/jboss:as-6.1.0
ports:
- "9990:9990"
- "8080:8080"
- "8787:8787"
jboss-6.1.0.Final/bin/run.conf 中#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
的#
重新啟動容器即可
docker restart 808d3fffae0c
此處有坑點,個別漏洞調用鏈查看不了可能是確實代碼,需要添加資源到idea中,而本次的這個核心漏洞組件httpha-invoker.sar
,打包成jar包后無法進行斷點,需要扔到jd-gui中進行反編譯打包后添加到idea資源中。
0x02 漏洞分析
查看調用鏈定位漏洞位置
直接就接受值進行反序列化了,但並不是在一個位置存在任意數據反序列化
以上是org.jboss.invocation.http.servlet#ReadOnlyAccessFilter
類的反序列化位置
而org.jboss.invocation.http.servlet#InvokerServlet
同樣存在任意反序列化點
查看web.xml
發現/invoker/JMXInvokerServlet/*
,/invoker/readonly
,/JMXInvokerServlet/
等地方都可觸發。
關於CVE-2017-7504類似漏洞位置在/jbossmq-httpil/HTTPServerILServlet
,在此不做分析。
0x03 結尾
文章略顯水分,因為JBoss這些漏洞接受過來就直接進行反序列化了,而且還是接受原生的數據並未進行加密解密處理。分析起來比較簡單,但是反序列化回顯的構造又成了一大問題,下篇文章再對反序列化回顯進行探究。