[Vulfocus解題系列]Tomcat文件包含 & 文件讀取漏洞(CVE-2020-1938)

昨天寫了一篇Tomcat漏洞PUT方法任意寫入文件漏洞(CVE-2017-12615) 的復現文章,今天決定近這兩天把Tomcat常見的漏洞所有再次過一遍,就當複習回顧了。java

漏洞簡介

  1. CVE-2020-1938漏洞
    國家信息安全漏洞共享平臺發佈了Apache Tomcat上的文件包含漏洞。通知中表示攻擊者可利用該漏洞讀取或包含Tomcat上全部webapp目錄下的任意文件,如:webapp配置文件或源代碼等。
    影響版本:
  • Apache Tomcat 9.x < 9.0.31web

  • Apache Tomcat 8.x < 8.5.51安全

  • Apache Tomcat 7.x < 7.0.100架構

  • Apache Tomcat 6.xapp

    影響說明:讀取webapp下的全部文件webapp

  1. 漏洞原理
    Tomcat開啓了http和AJP兩種協議的處理,因爲「javax.servlet.include.request_uri」,「javax.servlet.include.path_info」,「javax.servlet.include.servlet_path」 這三個參數可控,因此致使文件讀取以及文件包含漏洞。不過注意,可讀取的文件也僅限於webapps/ROOT目錄。

題目環境

vulfocus演示環境自行搜索。jsp

解題過程

利用腳本讀取web.xml文件

發現可行,而後根據題目給出的提示,要去包含flag.png這個文件,因而繼續利用腳本包含便可
3d

Flag

動態flag。server

總結與拓展

總結

1.漏洞原理
Tomcat開啓了http和AJP兩種協議的處理,因爲「javax.servlet.include.request_uri」,「javax.servlet.include.path_info」,「javax.servlet.include.servlet_path」 這三個參數可控,因此致使文件讀取以及文件包含漏洞,固然內容也僅限制webapps/ROOT目錄。
2. 利用方法:
利用腳本讀取/包含文件。xml

拓展知識與一些疑問

  1. Tomcat的簡易架構圖

從圖中能夠看出,Tomcat最頂層的容器是Server,其中包含至少一個或者多個Service,一個Service有多個Connector和一個Container組成。這兩個組件的做用爲:
(1)Connector用於處理鏈接相關的事情,並提供Socket與Request和Response相關的轉化;
(2)Container用於封裝和管理Servlet,以及具體處理Request請求;
Tomcat默認的 conf/server.xml 中配置了2個 Connector,一個爲8080的對外提供的HTTP協議(1.1版本)端口,默認監聽地址: 0.0.0.0:8080,另一個就是默認的8009 AJP協議(1.3版本)端口,默認監聽地址爲:0.0.0.0:8009,兩個端口默認均監聽在外網ip。
這次漏洞產生的位置即是8009 AJP協議。

  1. 爲何是asdf.jsp
    起初對腳本中的asdf產生了疑問,最後看了原理以後,才發現,這裏的asdf能夠是任意字母只要Servlet中沒有就能夠,若是沒有就會啓動DefaultServlet。 若是是要進行文件包含的話,那麼就要使用asdf.jsp這樣就會走jspServlet。
相關文章
相關標籤/搜索