欧美另类视频一区-在线观看一区二区精品-HD免费看片,性色av一区二区咪爱,天堂av中文字幕,亚洲精品wwww

Tomcat AJP協(xié)議漏洞分析與利用

作者:安數(shù)網(wǎng)絡(luò) 發(fā)布時(shí)間:2020-02-25 13:43:38 瀏覽次數(shù):1457

0x01 漏洞基本信息

漏洞名稱:Tomcat AJP協(xié)議漏洞

CVE編號(hào):CVE-2020-1938

漏洞簡介:2020年2月4日,Apache Tomcat官方發(fā)布了新的版本,該版本修復(fù)了一個(gè)影響所有版本(7.*、8.*、9.*)的文件包含漏洞,但官方暫未發(fā)布安全公告,2020年2月20日,CNVD發(fā)布了漏洞公告,對(duì)應(yīng)漏洞編號(hào):CNVD-2020-10487。漏洞是Tomcat AJP協(xié)議存在缺陷而導(dǎo)致,攻擊者利用漏洞可以構(gòu)造特定參數(shù),讀取服務(wù)器webapp/ROOT下的任意文件。若目標(biāo)服務(wù)器同時(shí)存在文件上傳功能,攻擊者可進(jìn)一步通過文件包含實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行。目前,廠商已發(fā)布新版本完成漏洞修復(fù)。

漏洞影響范圍:

Apache Tomcat 6

Apache Tomcat 7 < 7.0.100

Apache Tomcat 8 < 8.5.51

Apache Tomcat 9 < 9.0.31

0x02 漏洞起因

以下內(nèi)容來自:https://mp.weixin.qq.com/s/GzqLkwlIQi_i3AVIXn59FQ

tomcat默認(rèn)的conf/server.xml中配置了2個(gè)Connector,一個(gè)為8080的對(duì)外提供的HTTP協(xié)議端口,另外一個(gè)就是默認(rèn)的8009 AJP協(xié)議端口,兩個(gè)端口默認(rèn)均監(jiān)聽在外網(wǎng)ip,如下圖所示:

當(dāng)tomcat服務(wù)啟動(dòng)后,查看端口可以發(fā)現(xiàn)8009端口已經(jīng)處于監(jiān)聽狀態(tài):

tomcat在接收ajp請(qǐng)求的時(shí)候會(huì)調(diào)用org.apache.coyote.ajp.AjpProcessor來處理ajp消息,prepareRequest將ajp里面的內(nèi)容取出來設(shè)置成request對(duì)象的Attribute屬性,如下圖:

因此可以通過這種特性,控制request對(duì)象的以下三個(gè)Attribute屬性:

javax.servlet.include.request_uri

javax.servlet.include.path_info

javax.servlet.include.servlet_path

然后封裝成對(duì)應(yīng)的request之后,繼續(xù)走servlet的映射流程,如下圖所示:

具體的映射方式這里就不介紹了。

0x03 漏洞利用方式

1、利用DefaultServlet實(shí)現(xiàn)任意文件下載

當(dāng)url請(qǐng)求未在映射的url列表里面,會(huì)通過tomcat默認(rèn)的DefaultServlet,根據(jù)上面的三個(gè)屬性來讀取文件,如下圖所示:

通過serveResource方法來獲取資源文件:

通過getRelativePath來獲取資源文件路徑:

然后通過控制ajp控制的上述三個(gè)屬性來讀取文件,操控上述三個(gè)屬性,從而可以讀取到/WEB-INF下面的所有敏感文件,不限于class、xml、jar等文件。

2、通過jspservlet實(shí)現(xiàn)任意后綴文件包含

當(dāng)url(比如http://xxx/xxx/xxx.jsp)請(qǐng)求映射在org.apache.jasper.servlet.JspServlet這個(gè)servlet的時(shí)候,也可以通過上述三個(gè)屬性來控制訪問的jsp文件,如下圖所示:

控制路徑之后就能以jsp解析該文件,所以只需要一個(gè)內(nèi)容可控的文件即可實(shí)現(xiàn)rce。

0x04 AJP協(xié)議規(guī)范

參考https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html

0x05 漏洞利用環(huán)境

靶機(jī):centos7+tomcat8.5.30

攻擊機(jī):win7+python3

0x06 漏洞利用過程

1、Tomcat版本檢測(cè)

通常在Apache Tomcat官網(wǎng)下載的安裝包名稱中,會(huì)包含當(dāng)前Tomcat的版本號(hào),用戶可通過查看解壓后的文件夾名稱,來確定當(dāng)前的版本。比如:

如果解壓后的Tomcat目錄名稱被修改過,或者通過Windows Service Installer方式安裝,使用軟件自帶的version模塊來獲取當(dāng)前的版本。進(jìn)入Tomcat安裝目錄的bin目錄,輸入命令./version.sh后,可查看當(dāng)前的軟件版本號(hào):

2、通過python腳本文件讀取及文件包含進(jìn)行RCE

公眾號(hào)回復(fù)關(guān)鍵詞 文件讀取獲取腳本地址

用法:python3 2020-10487.py 172.26.1.182 -f WEB-INF/web.xml

可以看到成功讀取到了ROOT/WEB-INF下的web.xml文件(如果ROOT下存放了網(wǎng)站的源代碼,就會(huì)被不法分子通過讀取該源碼,然后進(jìn)行代碼審計(jì),導(dǎo)致其他漏洞的發(fā)生),web.xml文件:

文件包含進(jìn)行RCE(實(shí)際環(huán)境中需要有上傳點(diǎn)):

因?yàn)槭菍?shí)驗(yàn)環(huán)境,并沒有上傳點(diǎn),所以我們已經(jīng)在webapp/ROOT下存放了一個(gè)名為exec.txt的文件,來模擬文件上傳后的文件,然后包含該文件即可進(jìn)行RCE。

exec.txt內(nèi)容為執(zhí)行“whoami”代碼:

<%out.println(new java.io.BufferedReader(new java.io.InputStreamReader(Runtime.getRuntime().exec("whoami").getInputStream())).readLine());%>

用法:python3 CVE-2020-1938.py 172.26.1.182 -f exec.txt --rce 1

0x07 漏洞修復(fù)建議

1、臨時(shí)禁用AJP協(xié)議端口:在conf/server.xml配置文件中注釋掉117行的<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" /> ,然后重啟服務(wù)器。

再次進(jìn)行文件讀取就會(huì)拋出異常,修復(fù)成功:

2、下載官方最新版:

https://tomcat.apache.org/download-70.cgi 

https://tomcat.apache.org/download-80.cgi 

https://tomcat.apache.org/download-90.cgi 

聲明:筆者初衷用于分享與普及網(wǎng)絡(luò)知識(shí),若讀者因此作出任何危害網(wǎng)絡(luò)安全的行為后果自負(fù),與安數(shù)網(wǎng)絡(luò)及原作者無關(guān)!


來源:合天智匯

及時(shí)掌握網(wǎng)絡(luò)安全態(tài)勢(shì) 盡在傻蛋網(wǎng)絡(luò)安全監(jiān)測(cè)系統(tǒng)

【網(wǎng)絡(luò)安全監(jiān)管部門】免費(fèi)試用

本文來源:

如涉及侵權(quán),請(qǐng)及時(shí)與我們聯(lián)系,我們會(huì)在第一時(shí)間刪除或處理侵權(quán)內(nèi)容。
電話:400-869-9193 負(fù)責(zé)人:張明