溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

發布時間:2021-12-18 18:20:47 來源:億速云 閱讀:138 作者:柒染 欄目:網絡管理

這篇文章給大家介紹如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

ApacheTomca遠程執行代碼(CVE-2019-0232)漏洞淺析和復現

一、 漏洞背景

Apache Tomcat,俗稱Tomcat Server,是一個開源的JavaServlet容器,由社區在Apache Software Foundation(ASF)的支持下開發。它實現了多個Java EE規范,包括Java Servlet,JavaServer Pages(JSP),Java表達式語言(EL)和WebSocket,并提供了一個“純Java”HTTP Web服務器環境,Java代碼可以在該環境中運行。

2019年4月15日,Nightwatch網絡安全發布的信息對CVE-2019-0232,包括Apache Tomcat上的通用網關接口(CGI)Servlet的一個遠程執行代碼(RCE)漏洞。這種高嚴重性漏洞可能允許攻擊者通過濫用由Tomcat CGIServlet輸入驗證錯誤引起的操作系統命令注入來執行任意命令。

二、  影響版本

影響版本如下:

tomcat 7.0.04之前

tomcat 8.5.40之前

tomcat 9.0.19之前  

三、  漏洞分析

CGI(CommonGateway Interface) 是WWW技術中最重要的技術之一,有著不可替代的重要地位。CGI是外部應用程序(CGI程序)與WEB服務器之間的接口標準,是在CGI程序和Web服務器之間傳遞信息的過程。CGI規范允許Web服務器執行外部程序,并將它們的輸出發送給Web瀏覽器,CGI將Web的一組簡單的靜態超媒體文檔變成一個完整的新的交互式媒體。CGI腳本用于執行Tomcat Java虛擬機(JVM)外部的程序。默認情況下禁用的CGI Servlet用于生成從查詢字符串生成的命令行參數。由于Java運行時環境(JRE)將命令行參數傳遞給Windows的錯誤,在啟用CGI Servlet參數enableCmdLineArguments的Windows計算機上運行的Tomcat服務器很容易受到遠程代碼執行的影響。

ApacheTomcat文件web.xml用于為加載到Tomcat實例中的所有Web應用程序定義默認值。CGI Servlet是默認提供的servlet之一。該servlet支持執行符合CGI規范的外部應用程序。通常,CGI Servlet映射到URL模式“/cgi-bin / *”,這意味著任何執行的CGI應用程序必須存在于Web應用程序中。

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

通過調用CreateProcess()函數啟動Windows操作系統中的新進程,該函數將以下命令行作為字符串(對CreateProcess的lpComandLine參數):int CreateProcess(...,lpComandLine,...)

Windows中的參數不是作為字符串數組單獨傳遞的,而是作為單個命令行字符串傳遞的。這要求程序通過使用GetCommandLine() API 提取命令行字符串然后使用CommandLineArgvW()輔助函數解析參數字符串來解析命令行本身。Windows的命令行字符串流程圖如下:

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

漏洞是由于命令行參數從JRE到Windows的不正確傳遞而產生的,對于Java應用程序,在CreateProcess()函數啟動之前調用ProcessBuilder()。然后將參數傳遞給ProcessImpl()的靜態方法start ,這是一個依賴于平臺的類。在ProcessImpl()的Windows實現中,start方法調用ProcessImpl()的私有構造函數,該構造函數為CreateProcess調用創建命令行。Java應用程序的命令行字符串流程圖如下:如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

ProcessImpl()構建Cmdline并將其傳遞給CreateProcess() Windows函數,之后CreateProcess()  在cmd.exe shell環境中執行.bat.cmd文件。

如果要運行的文件包含.bat或.cmd擴展名,則要運行的映像將變為cmd.exe,即Windows命令提示符。然后CreateProcess()在階段1重新啟動,批處理文件的名稱作為cmd.exe的第一個參數傳遞。這導致'hello.bat ...'成為'C:\ Windows \ system32 \cmd.exe / c“hello.bat ...” '。由于CommandLineToArgvW的引用規則與cmd的引用規則不同,這意味著需要應用一組額外的引用規則以避免cmd.exe解釋的命令行中的命令注入。

由于Java(ProcessImpl())確實沒有額外的報價為這種隱含的cmd.exe上傳遞的參數調用推廣,通過加工參數的cmd.exe現在被用來執行,呈現固有的問題,如果參數不傳遞給cmd.exe的正確。

對于cmd.exe,我們首先理解cmd本質上是一個文本預處理器:給定一個命令行,它進行一系列文本轉換,然后將轉換后的命令行交給CreateProcess()。某些轉換用其值替換環境變量名稱。轉換,例如由&,||,&&運算符觸發的轉換,將命令行拆分為幾個部分。所有cmd的轉換都由以下元字符之一觸發:(,),%,!,^,“,<,>,&和|。元字符“特別有趣:當cmd正在轉換命令行并看到”時,它會將“復制”到新的命令行,然后開始將字符從舊命令行復制到新命令行,而不會看到是否有任何這些字符是元字符。這一直持續到cmd到達命令行的末尾,進入變量替換,或者看到另一個“。

如果我們依賴cmd的“-behavior來保護參數,使用引號會產生意外行為。通過將不受信任的數據作為命令行參數傳遞,由此約定不匹配引起的錯誤成為安全問題。

例如,以下內容:

hello.bat“dir\”&whoami“

0:[hello.bat]

1:[&dir]

這里,cmd將&metacharacter解釋為命令分隔符,因為從它的角度來看,&字符位于引用區域之外。在這種情況下,'whoami'可以被任意數量的有害命令所取代。當使用hello.bat運行上面顯示的命令時實現命令執行。

四、  漏洞復現

首先下載有漏洞的tomcat版本,加壓到響應文件夾,然后配置環境變量。如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

然后修改conten.xml

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

修改web.xml,添加一些參數并在web.xml文件中啟用CGIServlet。

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

兩個文件修改后,啟動服務器,訪問http://localhost:8080/如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

成功訪問到tomcat后,創建hello.bat腳本放入cgi-bin目錄下。如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

 hello.bat內容如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

然后訪問http://localhost:8080/cgi-bin/hello.bat?dir,顯示如下命令執行成功。如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現

五、  修復建議

下載Apache Tomcat官方補丁盡快升級進行防護。同時,用戶可以將CGI Servlet初始化參數enableCmdLineArguments設置為false來進行防護。

關于如何進行ApacheTomca遠程執行代碼CVE-2019-0232漏洞淺析和復現就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女